From 0738965f2d302339ac19ac925cc8485a0c4eb187 Mon Sep 17 00:00:00 2001 From: Consolatis <35009135+Consolatis@users.noreply.github.com> Date: Wed, 25 May 2022 21:45:48 +0200 Subject: [PATCH] src/cursor.c: Ensure we send a release event for out-of-surface scrolling Backport of b24b9d2d23fb022abd6ca31dae9834f142bbb08d --- src/cursor.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/cursor.c b/src/cursor.c index 9d474a71..8d322483 100644 --- a/src/cursor.c +++ b/src/cursor.c @@ -679,9 +679,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) { return; } @@ -715,7 +724,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; }