diff options
| author | Ted Gould <ted@gould.cx> | 2012-01-24 07:38:28 -0600 |
|---|---|---|
| committer | Ted Gould <ted@gould.cx> | 2012-01-24 07:38:28 -0600 |
| commit | 8d18657e839ba4cf8db7b69753a7896bbef49089 (patch) | |
| tree | 2b325e424d306fc6555e6dae42ea2599fbefafe9 /libdbusmenu-gtk/client.c | |
| parent | 1da8653f7745fd81acd89ab6422160235264be81 (diff) | |
| parent | 0845cb4986d649c38e7f9b9784af76539bfb2dea (diff) | |
| download | libdbusmenu-8d18657e839ba4cf8db7b69753a7896bbef49089.tar.gz libdbusmenu-8d18657e839ba4cf8db7b69753a7896bbef49089.tar.bz2 libdbusmenu-8d18657e839ba4cf8db7b69753a7896bbef49089.zip | |
Update to trunk
Diffstat (limited to 'libdbusmenu-gtk/client.c')
| -rw-r--r-- | libdbusmenu-gtk/client.c | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index 1051f20..533764a 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -505,7 +505,6 @@ menu_item_stop_activating(DbusmenuMenuitem * mi) guint id = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(parent), data_idle_close_id)); if (id > 0) { - g_source_remove(id); g_object_set_data(G_OBJECT(parent), data_idle_close_id, GINT_TO_POINTER(0)); should_close = TRUE; @@ -575,6 +574,14 @@ close_in_idle (DbusmenuMenuitem * mi) } static void +cancel_idle_close_id (gpointer data) +{ + guint id = GPOINTER_TO_INT(data); + if (id > 0) + g_source_remove(id); +} + +static void submenu_notify_visible_cb (GtkWidget * menu, GParamSpec * pspec, DbusmenuMenuitem * mi) { if (gtk_widget_get_visible (menu)) { @@ -591,8 +598,8 @@ submenu_notify_visible_cb (GtkWidget * menu, GParamSpec * pspec, DbusmenuMenuite data_idle_close_id)); if (id == 0) { id = g_idle_add((GSourceFunc)close_in_idle, mi); - g_object_set_data(G_OBJECT(mi), data_idle_close_id, - GINT_TO_POINTER(id)); + g_object_set_data_full(G_OBJECT(mi), data_idle_close_id, + GINT_TO_POINTER(id), cancel_idle_close_id); } } } @@ -823,14 +830,22 @@ item_activate (DbusmenuClient * client, DbusmenuMenuitem * mi, guint timestamp, return; } -#ifdef MASSIVEDEBUGGING static void -destroy_gmi (GtkMenuItem * gmi, DbusmenuMenuitem * mi) +destroy_gmi (GtkMenuItem * gmi) { - g_debug("Destorying GTK Menuitem for %d", dbusmenu_menuitem_get_id(mi)); +#ifdef MASSIVEDEBUGGING + g_debug("Destroying GTK Menuitem %d", gmi); +#endif + + /* Call gtk_widget_destroy to remove from any containers and cleanup */ + gtk_widget_destroy(GTK_WIDGET(gmi)); + + /* Now remove last ref that we are holding (due to g_object_ref_sink in + dbusmenu_gtkclient_newitem_base). This should finalize the object */ + g_object_unref(G_OBJECT(gmi)); + return; } -#endif /** * dbusmenu_gtkclient_newitem_base: @@ -857,7 +872,7 @@ dbusmenu_gtkclient_newitem_base (DbusmenuGtkClient * client, DbusmenuMenuitem * /* Attach these two */ g_object_ref_sink(G_OBJECT(gmi)); - g_object_set_data_full(G_OBJECT(item), data_menuitem, gmi, (GDestroyNotify)gtk_widget_destroy); + g_object_set_data_full(G_OBJECT(item), data_menuitem, gmi, (GDestroyNotify)destroy_gmi); /* DbusmenuMenuitem signals */ g_signal_connect(G_OBJECT(item), DBUSMENU_MENUITEM_SIGNAL_PROPERTY_CHANGED, G_CALLBACK(menu_prop_change_cb), client); |
