]> git.mdlowis.com Git - proto/labwc.git/commitdiff
interactive: Fix crash if a window is destroyed while moving it
authorJoshua Ashton <joshua@froggi.es>
Fri, 3 Dec 2021 08:09:19 +0000 (08:09 +0000)
committerJohan Malm <johanmalm@users.noreply.github.com>
Fri, 3 Dec 2021 18:11:31 +0000 (18:11 +0000)
Need to clean this up if it's our grabbed window!

Signed-off-by: Joshua Ashton <joshua@froggi.es>
include/labwc.h
src/interactive.c
src/xdg.c
src/xwayland.c

index da987e444d5d7ea47f8a42917a0fe56897a2c47c..341fc5a13418125c626a7114960d9f99e0dd4d0c 100644 (file)
@@ -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,
index 5dcedc3d56ecd395f73e687e6fefdeb8e206ad82..9337105f3535ff673e85a1ec91a26fc1c410d8b6 100644 (file)
@@ -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;
+       }
+}
index 9bc24ef2be14392dd4ba7f4a7c50bed01d9a9528..f867216f1ce511cb53cfa640eddaffd1c2b2ad6a 100644 (file)
--- 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);
index 1078c96120bb7a3584b4683a3d98691a3a66e0cf..10f7d022f7afca77ea46bd4f9df6ce7e59bd0d50 100644 (file)
@@ -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);