aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--debian/changelog6
-rw-r--r--libdbusmenu-glib/client.c21
-rw-r--r--tests/test-gtk-label-server.c8
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);