]> git.mdlowis.com Git - proto/labwc.git/commitdiff
src/cursor.c: Ensure we send a release event for out-of-surface scrolling
authorConsolatis <35009135+Consolatis@users.noreply.github.com>
Wed, 25 May 2022 19:45:48 +0000 (21:45 +0200)
committerJohan Malm <johanmalm@users.noreply.github.com>
Wed, 25 May 2022 20:32:48 +0000 (21:32 +0100)
src/cursor.c

index 6c93f317d998f1093e70f1c4b32cd820b2566603..b4a82638172f74e784882f3afa52457c0dc0a055 100644 (file)
@@ -716,9 +716,18 @@ cursor_button(struct wl_listener *listener, void *data)
 
        /* handle _release_ */
        if (event->state == WLR_BUTTON_RELEASED) {
-               server->seat.pressed.view = NULL;
-               server->seat.pressed.surface = NULL;
-
+               seat->pressed.view = NULL;
+               if (seat->pressed.surface && seat->pressed.surface != surface) {
+                       /*
+                        * Button released but originally pressed over a different surface.
+                        * Just send the release event to the still focused surface.
+                        */
+                       wlr_seat_pointer_notify_button(seat->seat, event->time_msec,
+                               event->button, event->state);
+                       seat->pressed.surface = NULL;
+                       return;
+               }
+               seat->pressed.surface = NULL;
                if (server->input_mode == LAB_INPUT_STATE_MENU) {
                        if (close_menu) {
                                if (server->menu_current) {
@@ -752,7 +761,7 @@ cursor_button(struct wl_listener *listener, void *data)
        }
 
        /* Handle _press */
-       if (view_area == LAB_SSD_CLIENT) {
+       if (surface) {
                server->seat.pressed.view = view;
                server->seat.pressed.surface = surface;
        }