menu: assert no menu is opened in menu_open_root()

66a3beb added an early-return when the menu is opened, so we can guarantee
that no menu is opened there.
This commit is contained in:
tokyo4j 2025-01-18 13:09:47 +09:00 committed by Consolatis
parent 4072a80eba
commit 8f5217c98b

View file

@ -1327,20 +1327,6 @@ menu_set_selection(struct menu *menu, struct menuitem *item)
menu->selection.item = item;
}
static void
close_all_submenus(struct menu *menu)
{
struct menuitem *item;
wl_list_for_each(item, &menu->menuitems, link) {
if (item->submenu) {
wlr_scene_node_set_enabled(
&item->submenu->scene_tree->node, false);
close_all_submenus(item->submenu);
}
}
menu->selection.menu = NULL;
}
/*
* We only destroy pipemenus when closing the entire menu-tree so that pipemenu
* are cached (for as long as the menu is open). This drastically improves the
@ -1388,17 +1374,14 @@ menu_close(struct menu *menu)
void
menu_open_root(struct menu *menu, int x, int y)
{
assert(menu);
if (menu->server->input_mode != LAB_INPUT_STATE_PASSTHROUGH) {
return;
}
assert(menu);
if (menu->server->menu_current) {
menu_close(menu->server->menu_current);
destroy_pipemenus(menu->server);
}
close_all_submenus(menu);
menu_set_selection(menu, NULL);
assert(!menu->server->menu_current);
menu_configure(menu, (struct wlr_box){.x = x, .y = y});
wlr_scene_node_set_enabled(&menu->scene_tree->node, true);
menu->server->menu_current = menu;