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)
This commit is contained in:
parent
3fd74abb3c
commit
6e799ad40d
2 changed files with 17 additions and 0 deletions
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue