summaryrefslogtreecommitdiff
path: root/src/windowlist.c
diff options
context:
space:
mode:
authorBrian Tarricone <brian@tarricone.org>2005-01-11 10:57:06 +0000
committerBrian Tarricone <brian@tarricone.org>2005-01-11 10:57:06 +0000
commit4c2a9422c8641820dee925356d6e3c2bb1a21772 (patch)
tree8e93a4d1bc96444efc1be4723e689e088733e07a /src/windowlist.c
parent08e911edab5166f8e6ff4187512aef55002b124b (diff)
downloadxfdesktop-4c2a9422c8641820dee925356d6e3c2bb1a21772.tar.gz
fix case where open windowlist -> window is destroyed -> select window in
windowlist -> xfdesktop crash (bug 672) (Old svn revision: 8067)
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();