From 8f5217c98b2a31c873df9eb3b1237672a0b66116 Mon Sep 17 00:00:00 2001 From: tokyo4j Date: Sat, 18 Jan 2025 13:09:47 +0900 Subject: [PATCH] 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. --- src/menu/menu.c | 25 ++++--------------------- 1 file changed, 4 insertions(+), 21 deletions(-) diff --git a/src/menu/menu.c b/src/menu/menu.c index 1ddfd7eb..ee1c66ef 100644 --- a/src/menu/menu.c +++ b/src/menu/menu.c @@ -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;