}
for (; it; it = next, ++i) {
next = g_slist_next(it);
- menu_unref(it->data);
+ menu_free(it->data);
desktop_menus = g_slist_delete_link(desktop_menus, it);
menu_entry_remove(menu_find_entry_id(menu, i));
}
{
ObMenuFrame *frame = data;
if (c == frame->client) {
- /* adding/removing entries while it's shown is not fun, so just hide
- the menu and reshow it */
- if (frame->parent) {
- ObMenuEntryFrame *me = frame->parent_entry;
- ObMenuFrame *parent = frame->parent;
- gint sel =
- g_list_position(frame->entries,
- g_list_find(frame->entries, frame->selected));
- menu_frame_select(parent, NULL, TRUE);
- menu_frame_select(parent, me, TRUE);
-
- frame = parent->child;
- /* reselect the same spot or the last one if it got shorter */
- sel = MIN(sel, (gint)g_list_length(frame->entries));
- if (sel >= 0)
- menu_frame_select(frame,
- g_list_nth(frame->entries, sel)->data,
- TRUE);
- } else
- menu_frame_hide(frame);
+ /* the client won't even be on the screen anymore, so hide the menu */
+ menu_frame_hide_all();
}
}
g_free(self);
}
-void menu_unref(ObMenu *menu)
+void menu_free(ObMenu *menu)
{
if (menu)
g_hash_table_remove(menu_hash, menu->name);