aboutsummaryrefslogtreecommitdiff
path: root/libdbusmenu-glib/server.c
diff options
context:
space:
mode:
authorSebastien Bacher <seb128@ubuntu.com>2010-02-18 18:18:30 +0100
committerSebastien Bacher <seb128@ubuntu.com>2010-02-18 18:18:30 +0100
commit0af5090188b1002d4cbca3e8a60b701153a8b391 (patch)
tree18ee6d3f99611b8cc84327c338525df62ee5d2d2 /libdbusmenu-glib/server.c
parentaadfece2677f23d685f050ec479aaee93c6ababc (diff)
parent4ee1fccc17c4734c356ee528dd3a0665f5e296f0 (diff)
downloadlibdbusmenu-0af5090188b1002d4cbca3e8a60b701153a8b391.tar.gz
libdbusmenu-0af5090188b1002d4cbca3e8a60b701153a8b391.tar.bz2
libdbusmenu-0af5090188b1002d4cbca3e8a60b701153a8b391.zip
releasing version 0.2.5-0ubuntu1
Diffstat (limited to 'libdbusmenu-glib/server.c')
-rw-r--r--libdbusmenu-glib/server.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/libdbusmenu-glib/server.c b/libdbusmenu-glib/server.c
index 44ee911..f6dddf1 100644
--- a/libdbusmenu-glib/server.c
+++ b/libdbusmenu-glib/server.c
@@ -301,10 +301,29 @@ menuitem_property_changed (DbusmenuMenuitem * mi, gchar * property, GValue * val
return;
}
+/* Adds the signals for this entry to the list and looks at
+ the children of this entry to add the signals we need
+ as well. We like signals. */
+static void
+added_check_children (gpointer data, gpointer user_data)
+{
+ DbusmenuMenuitem * mi = (DbusmenuMenuitem *)data;
+ DbusmenuServer * server = (DbusmenuServer *)user_data;
+
+ menuitem_signals_create(mi, server);
+ g_list_foreach(dbusmenu_menuitem_get_children(mi), added_check_children, server);
+
+ return;
+}
+
+/* Callback for when a child is added. We need to connect everything
+ up and signal that the layout has changed. */
static void
menuitem_child_added (DbusmenuMenuitem * parent, DbusmenuMenuitem * child, guint pos, DbusmenuServer * server)
{
menuitem_signals_create(child, server);
+ g_list_foreach(dbusmenu_menuitem_get_children(child), added_check_children, server);
+
/* TODO: We probably need to group the layout update signals to make the number more reasonble. */
DbusmenuServerPrivate * priv = DBUSMENU_SERVER_GET_PRIVATE(server);
priv->layout_revision++;
@@ -378,7 +397,7 @@ _dbusmenu_server_get_layout (DbusmenuServer * server, gint parent, guint * revis
if (parent == 0) {
if (priv->root == NULL) {
/* g_debug("Getting layout without root node!"); */
- g_ptr_array_add(xmlarray, g_strdup("<menu/>"));
+ g_ptr_array_add(xmlarray, g_strdup("<menu id=\"0\"/>"));
} else {
dbusmenu_menuitem_buildxml(priv->root, xmlarray);
}