From 3e973c92ab0bf79d4deb77bc37abeb1f3721b6f3 Mon Sep 17 00:00:00 2001 From: Joshua Ashton Date: Fri, 3 Dec 2021 08:09:19 +0000 Subject: [PATCH] interactive: Fix crash if a window is destroyed while moving it Need to clean this up if it's our grabbed window! Signed-off-by: Joshua Ashton --- include/labwc.h | 1 + src/interactive.c | 7 +++++++ src/xdg.c | 1 + src/xwayland.c | 1 + 4 files changed, 10 insertions(+) diff --git a/include/labwc.h b/include/labwc.h index da987e44..341fc5a1 100644 --- a/include/labwc.h +++ b/include/labwc.h @@ -452,6 +452,7 @@ void seat_set_focus_layer(struct seat *seat, struct wlr_layer_surface_v1 *layer) void interactive_begin(struct view *view, enum input_mode mode, uint32_t edges); +void interactive_end(struct view *view); void output_init(struct server *server); void output_damage_surface(struct output *output, struct wlr_surface *surface, diff --git a/src/interactive.c b/src/interactive.c index 5dcedc3d..9337105f 100644 --- a/src/interactive.c +++ b/src/interactive.c @@ -38,3 +38,10 @@ interactive_begin(struct view *view, enum input_mode mode, uint32_t edges) break; } } + +void interactive_end(struct view *view) { + if (view->server->grabbed_view == view) { + view->server->input_mode = LAB_INPUT_STATE_PASSTHROUGH; + view->server->grabbed_view = NULL; + } +} diff --git a/src/xdg.c b/src/xdg.c index 9bc24ef2..f867216f 100644 --- a/src/xdg.c +++ b/src/xdg.c @@ -95,6 +95,7 @@ handle_destroy(struct wl_listener *listener, void *data) if (view->toplevel_handle) { wlr_foreign_toplevel_handle_v1_destroy(view->toplevel_handle); } + interactive_end(view); wl_list_remove(&view->link); ssd_destroy(view); free(view); diff --git a/src/xwayland.c b/src/xwayland.c index 1078c961..10f7d022 100644 --- a/src/xwayland.c +++ b/src/xwayland.c @@ -81,6 +81,7 @@ handle_destroy(struct wl_listener *listener, void *data) if (view->toplevel_handle) { wlr_foreign_toplevel_handle_v1_destroy(view->toplevel_handle); } + interactive_end(view); view->xwayland_surface = NULL; wl_list_remove(&view->link); wl_list_remove(&view->map.link); -- 2.52.0