diff options
author | Ted Gould <ted@canonical.com> | 2009-10-02 16:31:22 -0500 |
---|---|---|
committer | Ted Gould <ted@canonical.com> | 2009-10-02 16:31:22 -0500 |
commit | bc69362aa594cce5507ae1fbe8132576fb22df3e (patch) | |
tree | f92ff07ae143390163f70b88dff16412074b6013 /libdbusmenu-gtk/client.c | |
parent | aa94500715e83db9933fabc09f7df188098985b4 (diff) | |
parent | a1b3e6d9400764292ea6f4252e4fa93f98da3c5a (diff) | |
download | libdbusmenu-bc69362aa594cce5507ae1fbe8132576fb22df3e.tar.gz libdbusmenu-bc69362aa594cce5507ae1fbe8132576fb22df3e.tar.bz2 libdbusmenu-bc69362aa594cce5507ae1fbe8132576fb22df3e.zip |
Managing the lifecycle of the menu item more directly and making sure to remove them from the menu when they're not children of it anymore.
Diffstat (limited to 'libdbusmenu-gtk/client.c')
-rw-r--r-- | libdbusmenu-gtk/client.c | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index 901d739..8489424 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -159,7 +159,9 @@ menu_prop_change_cb (DbusmenuMenuitem * mi, gchar * prop, gchar * value, GtkMenu static void destoryed_dbusmenuitem_cb (gpointer udata, GObject * dbusmenuitem) { - /* g_debug("DbusmenuMenuitem was destroyed"); */ + #ifdef MASSIVEDEBUGGING + g_debug("DbusmenuMenuitem was destroyed"); + #endif gtk_widget_destroy(GTK_WIDGET(udata)); return; } @@ -176,6 +178,15 @@ new_menuitem (DbusmenuClient * client, DbusmenuMenuitem * mi, gpointer userdata) return; } +#ifdef MASSIVEDEBUGGING +static void +destroy_gmi (GtkMenuItem * gmi, DbusmenuMenuitem * mi) +{ + g_debug("Destorying GTK Menuitem for %d", dbusmenu_menuitem_get_id(mi)); + return; +} +#endif + /** dbusmenu_gtkclient_newitem_base: @client: The client handling everything on this connection @@ -195,8 +206,16 @@ new_menuitem (DbusmenuClient * client, DbusmenuMenuitem * mi, gpointer userdata) void dbusmenu_gtkclient_newitem_base (DbusmenuGtkClient * client, DbusmenuMenuitem * item, GtkMenuItem * gmi, DbusmenuMenuitem * parent) { + #ifdef MASSIVEDEBUGGING + g_debug("GTK Client new item base for %d", dbusmenu_menuitem_get_id(item)); + #endif + /* Attach these two */ g_object_set_data(G_OBJECT(item), data_menuitem, gmi); + g_object_ref(G_OBJECT(gmi)); + #ifdef MASSIVEDEBUGGING + g_signal_connect(G_OBJECT(gmi), "destroy", G_CALLBACK(destroy_gmi), item); + #endif /* DbusmenuMenuitem signals */ g_signal_connect(G_OBJECT(item), DBUSMENU_MENUITEM_SIGNAL_PROPERTY_CHANGED, G_CALLBACK(menu_prop_change_cb), gmi); @@ -222,6 +241,10 @@ dbusmenu_gtkclient_newitem_base (DbusmenuGtkClient * client, DbusmenuMenuitem * static void new_child (DbusmenuMenuitem * mi, DbusmenuMenuitem * child, guint position, DbusmenuGtkClient * gtkclient) { + #ifdef MASSIVEDEBUGGING + g_debug("GTK Client new child for %d on %d at %d", dbusmenu_menuitem_get_id(mi), dbusmenu_menuitem_get_id(child), position); + #endif + if (dbusmenu_menuitem_get_root(mi)) { return; } gpointer ann_menu = g_object_get_data(G_OBJECT(mi), data_menu); @@ -316,14 +339,13 @@ dbusmenu_gtkclient_menuitem_get (DbusmenuGtkClient * client, DbusmenuMenuitem * g_return_val_if_fail(DBUSMENU_IS_GTKCLIENT(client), NULL); g_return_val_if_fail(DBUSMENU_IS_MENUITEM(item), NULL); - GtkMenuItem * mi = GTK_MENU_ITEM(g_object_get_data(G_OBJECT(item), data_menuitem)); - if (mi == NULL) { - // new_menuitem(DBUSMENU_CLIENT(client), item, NULL); + gpointer data = g_object_get_data(G_OBJECT(item), data_menuitem); + if (data == NULL) { g_warning("GTK not updated"); - mi = GTK_MENU_ITEM(g_object_get_data(G_OBJECT(item), data_menuitem)); + return NULL; } - return mi; + return GTK_MENU_ITEM(data); } /* The base type handler that builds a plain ol' |