From 5aa5c123711ee4674830acc5907e0df44e321153 Mon Sep 17 00:00:00 2001 From: Consolatis <35009135+Consolatis@users.noreply.github.com> Date: Tue, 7 Mar 2023 22:59:56 +0100 Subject: [PATCH] Prevent rare crash due to layering move / resize / menu operations Fixes #817 Reported-by: @kode54 --- src/action.c | 6 ++++++ src/interactive.c | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/src/action.c b/src/action.c index 96b02145..bea2d896 100644 --- a/src/action.c +++ b/src/action.c @@ -211,6 +211,12 @@ void action_list_free(struct wl_list *action_list) static void show_menu(struct server *server, struct view *view, const char *menu_name) { + if (server->input_mode != LAB_INPUT_STATE_PASSTHROUGH + && server->input_mode != LAB_INPUT_STATE_MENU) { + /* Prevent opening a menu while resizing / moving a view */ + return; + } + bool force_menu_top_left = false; struct menu *menu = menu_get_by_id(menu_name); if (!menu) { diff --git a/src/interactive.c b/src/interactive.c index 482b20ea..728c92e1 100644 --- a/src/interactive.c +++ b/src/interactive.c @@ -28,6 +28,10 @@ interactive_begin(struct view *view, enum input_mode mode, uint32_t edges) struct seat *seat = &server->seat; struct wlr_box geometry = view->current; + if (server->input_mode != LAB_INPUT_STATE_PASSTHROUGH) { + return; + } + switch (mode) { case LAB_INPUT_STATE_MOVE: if (view->fullscreen) {