src/cursor.c: Ensure we send a release event for out-of-surface scrolling

This commit is contained in:
Consolatis 2022-05-25 21:45:48 +02:00 committed by Johan Malm
parent 81810db3b6
commit b24b9d2d23

View file

@ -716,9 +716,18 @@ cursor_button(struct wl_listener *listener, void *data)
/* handle _release_ */ /* handle _release_ */
if (event->state == WLR_BUTTON_RELEASED) { if (event->state == WLR_BUTTON_RELEASED) {
server->seat.pressed.view = NULL; seat->pressed.view = NULL;
server->seat.pressed.surface = 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 (server->input_mode == LAB_INPUT_STATE_MENU) {
if (close_menu) { if (close_menu) {
if (server->menu_current) { if (server->menu_current) {
@ -752,7 +761,7 @@ cursor_button(struct wl_listener *listener, void *data)
} }
/* Handle _press */ /* Handle _press */
if (view_area == LAB_SSD_CLIENT) { if (surface) {
server->seat.pressed.view = view; server->seat.pressed.view = view;
server->seat.pressed.surface = surface; server->seat.pressed.surface = surface;
} }