Check layout before getting pointer surface coords

This fixes issues of clients at the edge of the screen, like swaybar,
ignoring buttons.
This commit is contained in:
Vincent Vanlaer 2019-02-15 18:29:47 +01:00 committed by emersion
parent 5c78e5cd2c
commit cfacf85755

View file

@ -425,11 +425,12 @@ static void handle_cursor_motion(struct wl_listener *listener, void *data) {
dx, dy, dx_unaccel, dy_unaccel); dx, dy, dx_unaccel, dy_unaccel);
struct wlr_surface *surface = NULL; struct wlr_surface *surface = NULL;
struct sway_node *node = NULL;
double sx, sy; double sx, sy;
struct sway_node *node = node_at_coords(cursor->seat,
cursor->cursor->x, cursor->cursor->y, &surface, &sx, &sy);
if (cursor->active_constraint) { if (cursor->active_constraint) {
node = node_at_coords(cursor->seat,
cursor->cursor->x, cursor->cursor->y, &surface, &sx, &sy);
if (cursor->active_constraint->surface != surface) { if (cursor->active_constraint->surface != surface) {
return; return;
} }
@ -445,8 +446,13 @@ static void handle_cursor_motion(struct wl_listener *listener, void *data) {
} }
wlr_cursor_move(cursor->cursor, event->device, dx, dy); wlr_cursor_move(cursor->cursor, event->device, dx, dy);
// Recalculate pointer location after layout checks
node = node_at_coords(cursor->seat,
cursor->cursor->x, cursor->cursor->y, &surface, &sx, &sy);
cursor_send_pointer_motion(cursor, event->time_msec, node, surface, cursor_send_pointer_motion(cursor, event->time_msec, node, surface,
sx + dx, sy + dy); sx, sy);
transaction_commit_dirty(); transaction_commit_dirty();
} }