xwayland: Handle race between multi-pointer motion and clicks

Make sure we're looking at the right location.  The frame could have
received a motion event from a pointer from a different wl_seat, but
under X it looks like our core pointer moved.  Move the frame pointer
to the button press location before deciding what to do.
dev
Kristian Høgsberg 11 years ago
parent e5c1ae9368
commit 8c3c738718
  1. 7
      xwayland/window-manager.c

@ -1629,6 +1629,13 @@ weston_wm_handle_button(struct weston_wm *wm, xcb_generic_event_t *event)
FRAME_BUTTON_PRESSED : FRAME_BUTTON_RELEASED; FRAME_BUTTON_PRESSED : FRAME_BUTTON_RELEASED;
button_id = button->detail == 1 ? BTN_LEFT : BTN_RIGHT; button_id = button->detail == 1 ? BTN_LEFT : BTN_RIGHT;
/* Make sure we're looking at the right location. The frame
* could have received a motion event from a pointer from a
* different wl_seat, but under X it looks like our core
* pointer moved. Move the frame pointer to the button press
* location before deciding what to do. */
location = frame_pointer_motion(window->frame, NULL,
button->event_x, button->event_y);
location = frame_pointer_button(window->frame, NULL, location = frame_pointer_button(window->frame, NULL,
button_id, button_state); button_id, button_state);
if (frame_status(window->frame) & FRAME_STATUS_REPAINT) if (frame_status(window->frame) & FRAME_STATUS_REPAINT)

Loading…
Cancel
Save