summaryrefslogtreecommitdiff
path: root/src/windowlist.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/windowlist.c')
-rw-r--r--src/windowlist.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/windowlist.c b/src/windowlist.c
index 5d8814a9..044096bd 100644
--- a/src/windowlist.c
+++ b/src/windowlist.c
@@ -89,6 +89,23 @@ activate_window(GtkWidget *w, gpointer user_data)
netk_window_activate(netk_window);
}
+static void
+window_destroyed_cb(gpointer data, GObject *where_the_object_was)
+{
+ GtkWidget *mi = data;
+ GtkWidget *menu = gtk_widget_get_parent(mi);
+
+ if(mi && menu)
+ gtk_container_remove(GTK_CONTAINER(menu), mi);
+}
+
+static void
+mi_destroyed_cb(GtkObject *object, gpointer user_data)
+{
+ g_object_weak_unref(G_OBJECT(user_data),
+ (GWeakNotify)window_destroyed_cb, object);
+}
+
static GtkWidget *
menu_item_from_netk_window(NetkWindow *netk_window, gint icon_width,
gint icon_height)
@@ -230,8 +247,12 @@ windowlist_create(GdkScreen *gscreen)
}
gtk_widget_show(mi);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi);
+ g_object_weak_ref(G_OBJECT(netk_window),
+ (GWeakNotify)window_destroyed_cb, mi);
g_signal_connect(G_OBJECT(mi), "activate",
G_CALLBACK(activate_window), netk_window);
+ g_signal_connect(G_OBJECT(mi), "destroy",
+ G_CALLBACK(mi_destroyed_cb), netk_window);
}
mi = gtk_separator_menu_item_new();