summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2010-05-11 19:01:46 -0400
committerDana Jansens <danakj@orodu.net>2010-05-11 19:01:46 -0400
commit6e799ad40d8f313383dda1ac143eae14c41b9c89 (patch)
tree6c602da7aaf6ac0741b84244909cd325142d31a9
parent3fd74abb3c2969f170d727154245cde3ef8a4b87 (diff)
add cleanup functions to the client list menus that removes everything from them when they are not being shown (saves iterating thru the list uselessly when a client is unmanaged)
-rw-r--r--openbox/client_list_combined_menu.c6
-rw-r--r--openbox/client_list_menu.c11
2 files changed, 17 insertions, 0 deletions
diff --git a/openbox/client_list_combined_menu.c b/openbox/client_list_combined_menu.c
index f664b776..c26b6fa0 100644
--- a/openbox/client_list_combined_menu.c
+++ b/openbox/client_list_combined_menu.c
@@ -37,6 +37,11 @@ static ObMenu *combined_menu;
#define ADD_DESKTOP -2
#define REMOVE_DESKTOP -3
+static void self_cleanup(ObMenu *menu, gpointer data)
+{
+ menu_clear_entries(menu);
+}
+
static gboolean self_update(ObMenuFrame *frame, gpointer data)
{
ObMenu *menu = frame->menu;
@@ -151,6 +156,7 @@ void client_list_combined_menu_startup(gboolean reconfig)
combined_menu = menu_new(MENU_NAME, _("Windows"), TRUE, NULL);
menu_set_update_func(combined_menu, self_update);
+ menu_set_cleanup_func(combined_menu, self_cleanup);
menu_set_execute_func(combined_menu, menu_execute);
}
diff --git a/openbox/client_list_menu.c b/openbox/client_list_menu.c
index b47ead02..f3df2a5a 100644
--- a/openbox/client_list_menu.c
+++ b/openbox/client_list_menu.c
@@ -121,6 +121,16 @@ static void desk_menu_destroy(ObMenu *menu, gpointer data)
desktop_menus = g_slist_remove(desktop_menus, menu);
}
+static void self_cleanup(ObMenu *menu, gpointer data)
+{
+ menu_clear_entries(menu);
+
+ while (desktop_menus) {
+ menu_free(desktop_menus->data);
+ desktop_menus = g_slist_delete_link(desktop_menus, desktop_menus);
+ }
+}
+
static gboolean self_update(ObMenuFrame *frame, gpointer data)
{
ObMenu *menu = frame->menu;
@@ -203,6 +213,7 @@ void client_list_menu_startup(gboolean reconfig)
menu = menu_new(MENU_NAME, _("Desktops"), TRUE, NULL);
menu_set_update_func(menu, self_update);
+ menu_set_cleanup_func(menu, self_cleanup);
menu_set_execute_func(menu, self_execute);
}