aboutsummaryrefslogtreecommitdiff
path: root/libdbusmenu-glib/client-menuitem.c
diff options
context:
space:
mode:
authorTed Gould <ted@gould.cx>2010-03-31 13:47:27 -0500
committerTed Gould <ted@gould.cx>2010-03-31 13:47:27 -0500
commitcae176681adb2e32464ec690b319008ae04a4a09 (patch)
tree64a5a117dac2a8d7b315fdd6361d7c30c2c77a39 /libdbusmenu-glib/client-menuitem.c
parent2033f92976ad4e34f01ebf14d11f2198e7ec5142 (diff)
downloadlibdbusmenu-cae176681adb2e32464ec690b319008ae04a4a09.tar.gz
libdbusmenu-cae176681adb2e32464ec690b319008ae04a4a09.tar.bz2
libdbusmenu-cae176681adb2e32464ec690b319008ae04a4a09.zip
Adding a set of callbacks so that we can respond to the about to show request.
Diffstat (limited to 'libdbusmenu-glib/client-menuitem.c')
-rw-r--r--libdbusmenu-glib/client-menuitem.c38
1 files changed, 35 insertions, 3 deletions
diff --git a/libdbusmenu-glib/client-menuitem.c b/libdbusmenu-glib/client-menuitem.c
index 833b28c..979cf79 100644
--- a/libdbusmenu-glib/client-menuitem.c
+++ b/libdbusmenu-glib/client-menuitem.c
@@ -46,7 +46,7 @@ static void dbusmenu_client_menuitem_init (DbusmenuClientMenuitem *self);
static void dbusmenu_client_menuitem_dispose (GObject *object);
static void dbusmenu_client_menuitem_finalize (GObject *object);
static void handle_event (DbusmenuMenuitem * mi, const gchar * name, const GValue * value, guint timestamp);
-static void send_about_to_show (DbusmenuMenuitem * mi);
+static void send_about_to_show (DbusmenuMenuitem * mi, dbusmenu_menuitem_about_to_show_cb cb, gpointer cb_data);
G_DEFINE_TYPE (DbusmenuClientMenuitem, dbusmenu_client_menuitem, DBUSMENU_TYPE_MENUITEM);
@@ -109,11 +109,43 @@ handle_event (DbusmenuMenuitem * mi, const gchar * name, const GValue * value, g
return;
}
+typedef struct _about_to_show_t about_to_show_t;
+struct _about_to_show_t {
+ DbusmenuMenuitem * mi;
+ dbusmenu_menuitem_about_to_show_cb cb;
+ gpointer cb_data;
+};
+
+/* Handles calling the callback that we were called with */
+static void
+about_to_show_cb (gpointer user_data)
+{
+ about_to_show_t * data = (about_to_show_t *)user_data;
+
+ data->cb(data->mi, data->cb_data);
+
+ g_object_unref(data->mi);
+ g_free(user_data);
+ return;
+}
+
/* Passes the about to show signal on through the client. */
static void
-send_about_to_show (DbusmenuMenuitem * mi)
+send_about_to_show (DbusmenuMenuitem * mi, dbusmenu_menuitem_about_to_show_cb cb, gpointer cb_data)
{
DbusmenuClientMenuitemPrivate * priv = DBUSMENU_CLIENT_MENUITEM_GET_PRIVATE(mi);
- dbusmenu_client_send_about_to_show(priv->client, dbusmenu_menuitem_get_id(mi));
+ if (cb == NULL) {
+ /* Common enough that we don't want to bother
+ with the allocation */
+ dbusmenu_client_send_about_to_show(priv->client, dbusmenu_menuitem_get_id(mi), NULL, NULL);
+ } else {
+ about_to_show_t * data = g_new0(about_to_show_t, 1);
+ data->mi = mi;
+ data->cb = cb;
+ data->cb_data = cb_data;
+ g_object_ref(mi);
+
+ dbusmenu_client_send_about_to_show(priv->client, dbusmenu_menuitem_get_id(mi), about_to_show_cb, data);
+ }
return;
}