diff options
-rw-r--r-- | debian/changelog | 6 | ||||
-rw-r--r-- | libdbusmenu-glib/client.c | 21 | ||||
-rw-r--r-- | tests/test-gtk-label-server.c | 8 |
3 files changed, 35 insertions, 0 deletions
diff --git a/debian/changelog b/debian/changelog index 062a14a..f8deb4f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +libdbusmenu (0.0-0ubuntu1~ppa6~dbusdeath3+ihateppas~glibresignal4) UNRELEASED; urgency=low + + * Support menu signalling in the glib client. + + -- Ted Gould <ted@ubuntu.com> Mon, 20 Jul 2009 16:36:07 -0500 + libdbusmenu (0.0-0ubuntu1~ppa6~dbusdeath3+ihateppas~glibresignal3) karmic; urgency=low * On to Karmic! diff --git a/libdbusmenu-glib/client.c b/libdbusmenu-glib/client.c index 7319a7f..212071b 100644 --- a/libdbusmenu-glib/client.c +++ b/libdbusmenu-glib/client.c @@ -515,6 +515,26 @@ menuitem_get_properties_cb (DBusGProxy * proxy, GHashTable * properties, GError return; } +static void +menuitem_call_cb (DBusGProxy * proxy, GError * error, gpointer userdata) +{ + DbusmenuMenuitem * mi = (DbusmenuMenuitem *)userdata; + + if (error != NULL) { + g_warning("Unable to call menu item %d: %s", dbusmenu_menuitem_get_id(mi), error->message); + } + + return; +} + +static void +menuitem_activate (DbusmenuMenuitem * mi, DbusmenuClient * client) +{ + DbusmenuClientPrivate * priv = DBUSMENU_CLIENT_GET_PRIVATE(client); + org_freedesktop_dbusmenu_call_async (priv->menuproxy, dbusmenu_menuitem_get_id(mi), menuitem_call_cb, mi); + return; +} + /* Parse recursively through the XML and make it into objects as need be */ static DbusmenuMenuitem * @@ -541,6 +561,7 @@ parse_layout_xml(DbusmenuClient * client, xmlNodePtr node, DbusmenuMenuitem * it if (parent == NULL) { dbusmenu_menuitem_set_root(item, TRUE); } + g_signal_connect(G_OBJECT(item), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(menuitem_activate), client); g_signal_emit(G_OBJECT(client), signals[NEW_MENUITEM], 0, item, TRUE); /* Get the properties queued up for this item */ org_freedesktop_dbusmenu_get_properties_async(proxy, id, menuitem_get_properties_cb, item); diff --git a/tests/test-gtk-label-server.c b/tests/test-gtk-label-server.c index ee750ad..7730fe2 100644 --- a/tests/test-gtk-label-server.c +++ b/tests/test-gtk-label-server.c @@ -32,6 +32,13 @@ with this program. If not, see <http://www.gnu.org/licenses/>. #include <json-glib/json-glib.h> static void +menuitem_click(DbusmenuMenuitem * mi, gpointer user_data) +{ + g_debug("Clicked on: %d", dbusmenu_menuitem_get_id(mi)); + return; +} + +static void set_props (DbusmenuMenuitem * mi, JsonObject * node) { if (node == NULL) return; @@ -68,6 +75,7 @@ layout2menuitem (JsonNode * inlayout) } else { local = dbusmenu_menuitem_new(); } + g_signal_connect(G_OBJECT(local), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(menuitem_click), NULL); set_props(local, layout); |