summaryrefslogtreecommitdiff
path: root/openbox/client_list_menu.c
diff options
context:
space:
mode:
authorMikael Magnusson <mikachu@comhem.se>2006-08-19 20:34:27 +0000
committerMikael Magnusson <mikachu@comhem.se>2006-08-19 20:34:27 +0000
commitd77c8f62f2f908cfe1d09686a35dce1ccaf65aec (patch)
tree9156605b933cb60ebcad63959809134796784232 /openbox/client_list_menu.c
parent71ba050bfa22a45b9ce7f6cdf72979eb411d67b4 (diff)
a more proper fix for the client list menu trying to activate a closed client, no difference on end result
Diffstat (limited to 'openbox/client_list_menu.c')
-rw-r--r--openbox/client_list_menu.c32
1 files changed, 31 insertions, 1 deletions
diff --git a/openbox/client_list_menu.c b/openbox/client_list_menu.c
index e2d00bb5..dd8cad8b 100644
--- a/openbox/client_list_menu.c
+++ b/openbox/client_list_menu.c
@@ -154,10 +154,40 @@ static void self_update(ObMenuFrame *frame, gpointer data)
}
}
-void client_list_menu_startup()
+static void client_dest(ObClient *client, gpointer data)
+{
+ /* This concise function removes all references to a closed
+ * client in the client_list_menu, so we don't have to check
+ * in client.c */
+ GSList *it;
+ for (it = desktop_menus; it; it = g_slist_next(it)) {
+ ObMenu *mit = it->data;
+ GList *eit;
+ for (eit = mit->entries; eit; eit = g_list_next(eit)) {
+ ObMenuEntry *meit = eit->data;
+ if (meit->type == OB_MENU_ENTRY_TYPE_NORMAL) {
+ ObAction *a = meit->data.normal.actions->data;
+ ObClient *c = a->data.any.c;
+ if (c == client)
+ a->data.any.c = NULL;
+ }
+ }
+ }
+}
+
+void client_list_menu_startup(gboolean reconfig)
{
ObMenu *menu;
+ if (!reconfig)
+ client_add_destructor(client_dest, NULL);
+
menu = menu_new(MENU_NAME, _("Desktops"), NULL);
menu_set_update_func(menu, self_update);
}
+
+void client_list_menu_shutdown(gboolean reconfig)
+{
+ if (!reconfig)
+ client_remove_destructor(client_dest);
+}