all repos — openbox @ 6e799ad40d8f313383dda1ac143eae14c41b9c89

openbox fork - make it a bit more like ryudo

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)
Dana Jansens danakj@orodu.net
commit

6e799ad40d8f313383dda1ac143eae14c41b9c89

parent

3fd74abb3c2969f170d727154245cde3ef8a4b87

2 files changed, 17 insertions(+), 0 deletions(-)

jump to
M openbox/client_list_combined_menu.copenbox/client_list_combined_menu.c

@@ -37,6 +37,11 @@ #define SEPARATOR -1

#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 @@ client_add_destroy_notify(client_dest, NULL);

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); }
M openbox/client_list_menu.copenbox/client_list_menu.c

@@ -121,6 +121,16 @@

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 @@ client_add_destroy_notify(client_dest, NULL);

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); }