diff --git a/include/labwc.h b/include/labwc.h index 204f60e3..df80267b 100644 --- a/include/labwc.h +++ b/include/labwc.h @@ -135,6 +135,10 @@ struct seat { * This allows to keep dragging a scrollbar or selecting text even * when moving outside of the window. * + * It is also used to: + * - determine the target view for action in "Drag" mousebind + * - validate view move/resize requests from CSD clients + * * Both (view && !surface) and (surface && !view) are possible. */ struct { diff --git a/src/xdg.c b/src/xdg.c index a2de7f53..8a9d2d52 100644 --- a/src/xdg.c +++ b/src/xdg.c @@ -241,7 +241,9 @@ handle_request_move(struct wl_listener *listener, void *data) * want. */ struct view *view = wl_container_of(listener, view, request_move); - interactive_begin(view, LAB_INPUT_STATE_MOVE, 0); + if (view == view->server->seat.pressed.view) { + interactive_begin(view, LAB_INPUT_STATE_MOVE, 0); + } } static void @@ -257,7 +259,9 @@ handle_request_resize(struct wl_listener *listener, void *data) */ struct wlr_xdg_toplevel_resize_event *event = data; struct view *view = wl_container_of(listener, view, request_resize); - interactive_begin(view, LAB_INPUT_STATE_RESIZE, event->edges); + if (view == view->server->seat.pressed.view) { + interactive_begin(view, LAB_INPUT_STATE_RESIZE, event->edges); + } } static void diff --git a/src/xwayland.c b/src/xwayland.c index 85e57f29..398de0c2 100644 --- a/src/xwayland.c +++ b/src/xwayland.c @@ -228,7 +228,9 @@ handle_request_move(struct wl_listener *listener, void *data) * want. */ struct view *view = wl_container_of(listener, view, request_move); - interactive_begin(view, LAB_INPUT_STATE_MOVE, 0); + if (view == view->server->seat.pressed.view) { + interactive_begin(view, LAB_INPUT_STATE_MOVE, 0); + } } static void @@ -244,7 +246,9 @@ handle_request_resize(struct wl_listener *listener, void *data) */ struct wlr_xwayland_resize_event *event = data; struct view *view = wl_container_of(listener, view, request_resize); - interactive_begin(view, LAB_INPUT_STATE_RESIZE, event->edges); + if (view == view->server->seat.pressed.view) { + interactive_begin(view, LAB_INPUT_STATE_RESIZE, event->edges); + } } static void