aboutsummaryrefslogtreecommitdiff
path: root/libdbusmenu-gtk/menu.c
diff options
context:
space:
mode:
authorTed Gould <ted@canonical.com>2009-08-26 14:38:30 -0500
committerTed Gould <ted@canonical.com>2009-08-26 14:38:30 -0500
commit41336bb019c846e48b06cca071aba917fc86d0c3 (patch)
tree0835cc1729607e1e65e9f3bde72bfbcfd97d041c /libdbusmenu-gtk/menu.c
parentfc7cc87f18d5fc301c06489517f48c720ffd5006 (diff)
downloadlibdbusmenu-41336bb019c846e48b06cca071aba917fc86d0c3.tar.gz
libdbusmenu-41336bb019c846e48b06cca071aba917fc86d0c3.tar.bz2
libdbusmenu-41336bb019c846e48b06cca071aba917fc86d0c3.zip
Instead of directly appending items, make it so that they're not connected until they're realized.
Diffstat (limited to 'libdbusmenu-gtk/menu.c')
-rw-r--r--libdbusmenu-gtk/menu.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/libdbusmenu-gtk/menu.c b/libdbusmenu-gtk/menu.c
index bc7458c..6e78a04 100644
--- a/libdbusmenu-gtk/menu.c
+++ b/libdbusmenu-gtk/menu.c
@@ -214,6 +214,16 @@ root_child_delete (DbusmenuMenuitem * root, DbusmenuMenuitem * child, DbusmenuGt
}
static void
+child_realized (DbusmenuMenuitem * child, gpointer userdata)
+{
+ DbusmenuGtkMenu * menu = DBUSMENU_GTKMENU(userdata);
+ DbusmenuGtkMenuPrivate * priv = DBUSMENU_GTKMENU_GET_PRIVATE(menu);
+
+ gtk_menu_append(menu, GTK_WIDGET(dbusmenu_gtkclient_menuitem_get(priv->client, child)));
+ return;
+}
+
+static void
root_changed (DbusmenuGtkClient * client, DbusmenuMenuitem * newroot, DbusmenuGtkMenu * menu) {
if (newroot == NULL) {
gtk_widget_hide(GTK_WIDGET(menu));
@@ -227,7 +237,8 @@ root_changed (DbusmenuGtkClient * client, DbusmenuMenuitem * newroot, DbusmenuGt
GList * child = NULL;
guint count = 0;
for (child = dbusmenu_menuitem_get_children(newroot); child != NULL; child = g_list_next(child)) {
- gtk_menu_append(menu, GTK_WIDGET(dbusmenu_gtkclient_menuitem_get(client, child->data)));
+ /* gtk_menu_append(menu, GTK_WIDGET(dbusmenu_gtkclient_menuitem_get(client, child->data))); */
+ g_signal_connect(G_OBJECT(child->data), DBUSMENU_MENUITEM_SIGNAL_REALIZED, G_CALLBACK(child_realized), menu);
count++;
}