diff options
author | Ted Gould <ted@gould.cx> | 2011-02-15 11:54:43 -0600 |
---|---|---|
committer | Ted Gould <ted@gould.cx> | 2011-02-15 11:54:43 -0600 |
commit | d96e8ddcadc023ab9ac5bb9ff932011cd6788b5a (patch) | |
tree | b557d324cadaf66a63b7f2220da364640c1fcc88 /libdbusmenu-glib/client.c | |
parent | 931994f499108dec95c7e6c9022848667b69848f (diff) | |
parent | e1094452eda0314065bb1b02d616d573c0367a74 (diff) | |
download | libdbusmenu-d96e8ddcadc023ab9ac5bb9ff932011cd6788b5a.tar.gz libdbusmenu-d96e8ddcadc023ab9ac5bb9ff932011cd6788b5a.tar.bz2 libdbusmenu-d96e8ddcadc023ab9ac5bb9ff932011cd6788b5a.zip |
Syncing up to the group properties branch so our tests pass
Diffstat (limited to 'libdbusmenu-glib/client.c')
-rw-r--r-- | libdbusmenu-glib/client.c | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/libdbusmenu-glib/client.c b/libdbusmenu-glib/client.c index fa3b1d2..ba4ae7e 100644 --- a/libdbusmenu-glib/client.c +++ b/libdbusmenu-glib/client.c @@ -1026,12 +1026,40 @@ menuproxy_signal_cb (GDBusProxy * proxy, gchar * sender, gchar * signal, GVarian { g_return_if_fail(DBUSMENU_IS_CLIENT(user_data)); DbusmenuClient * client = DBUSMENU_CLIENT(user_data); + DbusmenuClientPrivate * priv = DBUSMENU_CLIENT_GET_PRIVATE(client); if (g_strcmp0(signal, "LayoutUpdated") == 0) { guint revision; gint parent; g_variant_get(params, "(ui)", &revision, &parent); layout_update(proxy, revision, parent, client); + } else if (priv->root == NULL) { + /* Drop out here, all the rest of these really need to have a root + node so we can just ignore them if there isn't one. */ } else if (g_strcmp0(signal, "ItemPropertiesUpdated") == 0) { + /* Remove before adding just incase there is a duplicate, against the + rules, but we can handle it so let's do it. */ + GVariantIter ritems; + g_variant_iter_init(&ritems, g_variant_get_child_value(params, 1)); + + GVariant * ritem; + while ((ritem = g_variant_iter_next_value(&ritems)) != NULL) { + gint id = g_variant_get_int32(g_variant_get_child_value(ritem, 0)); + DbusmenuMenuitem * menuitem = dbusmenu_menuitem_find_id(priv->root, id); + + if (menuitem == NULL) { + continue; + } + + GVariantIter properties; + g_variant_iter_init(&properties, g_variant_get_child_value(ritem, 1)); + gchar * property; + + while (g_variant_iter_next(&properties, "s", &property)) { + g_debug("Removing property '%s' on %d", property, id); + dbusmenu_menuitem_property_remove(menuitem, property); + } + } + GVariantIter items; g_variant_iter_init(&items, g_variant_get_child_value(params, 0)); @@ -1248,7 +1276,7 @@ dbusmenu_client_send_event (DbusmenuClient * client, gint id, const gchar * name edata->event = g_strdup(name); edata->timestamp = timestamp; edata->variant = variant; - g_variant_ref(variant); + g_variant_ref_sink(variant); g_dbus_proxy_call(priv->menuproxy, "Event", |