From 15c11261bd45e2732a31b2fa235cc2a6261452e4 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 17 Sep 2009 13:36:38 -0500 Subject: Adding in handling of the child moved event --- libdbusmenu-glib/server.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'libdbusmenu-glib/server.c') diff --git a/libdbusmenu-glib/server.c b/libdbusmenu-glib/server.c index ab5951f..f4c1dcb 100644 --- a/libdbusmenu-glib/server.c +++ b/libdbusmenu-glib/server.c @@ -323,6 +323,13 @@ menuitem_child_removed (DbusmenuMenuitem * parent, DbusmenuMenuitem * child, Dbu return; } +static void +menuitem_child_moved (DbusmenuMenuitem * parent, DbusmenuMenuitem * child, guint newpos, guint oldpos, DbusmenuServer * server) +{ + g_signal_emit(G_OBJECT(server), signals[LAYOUT_UPDATE], 0, TRUE); + return; +} + /* Connects all the signals that we're interested in coming from a menuitem */ static void @@ -330,6 +337,7 @@ menuitem_signals_create (DbusmenuMenuitem * mi, gpointer data) { g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_CHILD_ADDED, G_CALLBACK(menuitem_child_added), data); g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_CHILD_REMOVED, G_CALLBACK(menuitem_child_removed), data); + g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_CHILD_MOVED, G_CALLBACK(menuitem_child_moved), data); g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_PROPERTY_CHANGED, G_CALLBACK(menuitem_property_changed), data); return; } @@ -341,6 +349,7 @@ menuitem_signals_remove (DbusmenuMenuitem * mi, gpointer data) { g_signal_handlers_disconnect_by_func(G_OBJECT(mi), G_CALLBACK(menuitem_child_added), data); g_signal_handlers_disconnect_by_func(G_OBJECT(mi), G_CALLBACK(menuitem_child_removed), data); + g_signal_handlers_disconnect_by_func(G_OBJECT(mi), G_CALLBACK(menuitem_child_moved), data); g_signal_handlers_disconnect_by_func(G_OBJECT(mi), G_CALLBACK(menuitem_property_changed), data); return; } -- cgit v1.2.3 From a1c878beeb2807e47fb06fd75019fe136322e9a1 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 21 Sep 2009 14:54:00 -0500 Subject: Updating the signal to send a revision number --- libdbusmenu-glib/server.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) (limited to 'libdbusmenu-glib/server.c') diff --git a/libdbusmenu-glib/server.c b/libdbusmenu-glib/server.c index f4c1dcb..efac804 100644 --- a/libdbusmenu-glib/server.c +++ b/libdbusmenu-glib/server.c @@ -47,6 +47,7 @@ struct _DbusmenuServerPrivate { DbusmenuMenuitem * root; gchar * dbusobject; + gint layout_revision; }; #define DBUSMENU_SERVER_GET_PRIVATE(o) \ @@ -151,8 +152,8 @@ dbusmenu_server_class_init (DbusmenuServerClass *class) G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(DbusmenuServerClass, layout_update), NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); + g_cclosure_marshal_VOID__INT, + G_TYPE_NONE, 1, G_TYPE_INT); g_object_class_install_property (object_class, PROP_DBUS_OBJECT, @@ -183,6 +184,7 @@ dbusmenu_server_init (DbusmenuServer *self) priv->root = NULL; priv->dbusobject = NULL; + priv->layout_revision = 1; return; } @@ -235,7 +237,8 @@ set_property (GObject * obj, guint id, const GValue * value, GParamSpec * pspec) } else { g_debug("Setting root node to NULL"); } - g_signal_emit(obj, signals[LAYOUT_UPDATE], 0, TRUE); + priv->layout_revision++; + g_signal_emit(obj, signals[LAYOUT_UPDATE], 0, priv->layout_revision, TRUE); break; case PROP_LAYOUT: /* Can't set this, fall through to error */ @@ -310,7 +313,9 @@ menuitem_child_added (DbusmenuMenuitem * parent, DbusmenuMenuitem * child, guint { menuitem_signals_create(child, server); /* TODO: We probably need to group the layout update signals to make the number more reasonble. */ - g_signal_emit(G_OBJECT(server), signals[LAYOUT_UPDATE], 0, TRUE); + DbusmenuServerPrivate * priv = DBUSMENU_SERVER_GET_PRIVATE(server); + priv->layout_revision++; + g_signal_emit(G_OBJECT(server), signals[LAYOUT_UPDATE], 0, priv->layout_revision, TRUE); return; } @@ -319,14 +324,18 @@ menuitem_child_removed (DbusmenuMenuitem * parent, DbusmenuMenuitem * child, Dbu { menuitem_signals_remove(child, server); /* TODO: We probably need to group the layout update signals to make the number more reasonble. */ - g_signal_emit(G_OBJECT(server), signals[LAYOUT_UPDATE], 0, TRUE); + DbusmenuServerPrivate * priv = DBUSMENU_SERVER_GET_PRIVATE(server); + priv->layout_revision++; + g_signal_emit(G_OBJECT(server), signals[LAYOUT_UPDATE], 0, priv->layout_revision, TRUE); return; } static void menuitem_child_moved (DbusmenuMenuitem * parent, DbusmenuMenuitem * child, guint newpos, guint oldpos, DbusmenuServer * server) { - g_signal_emit(G_OBJECT(server), signals[LAYOUT_UPDATE], 0, TRUE); + DbusmenuServerPrivate * priv = DBUSMENU_SERVER_GET_PRIVATE(server); + priv->layout_revision++; + g_signal_emit(G_OBJECT(server), signals[LAYOUT_UPDATE], 0, priv->layout_revision, TRUE); return; } -- cgit v1.2.3 From 363f7fa805de63ee1a8e0bfca05ce56bcf475489 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 21 Sep 2009 14:55:10 -0500 Subject: Cleanup changes from last commit. --- libdbusmenu-glib/server.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'libdbusmenu-glib/server.c') diff --git a/libdbusmenu-glib/server.c b/libdbusmenu-glib/server.c index efac804..af7bbef 100644 --- a/libdbusmenu-glib/server.c +++ b/libdbusmenu-glib/server.c @@ -143,6 +143,8 @@ dbusmenu_server_class_init (DbusmenuServerClass *class) /** DbusmenuServer::layout-update: @arg0: The #DbusmenuServer emitting the signal. + @arg1: A revision number representing which revision the update + represents itself as. This signal is emitted any time the layout of the menuitems under this server is changed. -- cgit v1.2.3 From b8c1eb0bf8b17d703fa8fea3e2c68bac6a7fee61 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 21 Sep 2009 15:01:40 -0500 Subject: Putting the revision number into the XML sent across the bus. --- libdbusmenu-glib/server.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'libdbusmenu-glib/server.c') diff --git a/libdbusmenu-glib/server.c b/libdbusmenu-glib/server.c index af7bbef..1ac1da6 100644 --- a/libdbusmenu-glib/server.c +++ b/libdbusmenu-glib/server.c @@ -280,9 +280,9 @@ get_property (GObject * obj, guint id, GValue * value, GParamSpec * pspec) GPtrArray * xmlarray = g_ptr_array_new(); if (priv->root == NULL) { /* g_debug("Getting layout without root node!"); */ - g_ptr_array_add(xmlarray, g_strdup("")); + g_ptr_array_add(xmlarray, g_strdup_printf("", priv->layout_revision)); } else { - dbusmenu_menuitem_buildxml(priv->root, xmlarray); + dbusmenu_menuitem_buildxml(priv->root, xmlarray, priv->layout_revision); } g_ptr_array_add(xmlarray, NULL); -- cgit v1.2.3