From b9d2983324c91f0a2805b1f10afcf2a929f939b4 Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Sat, 31 Mar 2018 11:18:29 -0400 Subject: [PATCH] Fix interaction between warping and following --- sway/input/cursor.c | 5 ++++- sway/input/seat.c | 13 ++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/sway/input/cursor.c b/sway/input/cursor.c index 35dd5dc8..2a096033 100644 --- a/sway/input/cursor.c +++ b/sway/input/cursor.c @@ -120,6 +120,9 @@ static struct sway_container *container_at_cursor(struct sway_cursor *cursor, return NULL; } +void _sway_seat_set_focus(struct sway_seat *seat, + struct sway_container *container, bool warp); + static void cursor_send_pointer_motion(struct sway_cursor *cursor, uint32_t time) { struct wlr_seat *seat = cursor->seat->wlr_seat; @@ -127,7 +130,7 @@ static void cursor_send_pointer_motion(struct sway_cursor *cursor, double sx, sy; struct sway_container *c = container_at_cursor(cursor, &surface, &sx, &sy); if (c && config->focus_follows_mouse) { - sway_seat_set_focus(cursor->seat, c); + _sway_seat_set_focus(cursor->seat, c, false); } // reset cursor if switching between clients diff --git a/sway/input/seat.c b/sway/input/seat.c index eab5cf40..4e7e018d 100644 --- a/sway/input/seat.c +++ b/sway/input/seat.c @@ -291,8 +291,8 @@ void sway_seat_configure_xcursor(struct sway_seat *seat) { seat->cursor->cursor->y); } -void sway_seat_set_focus(struct sway_seat *seat, - struct sway_container *container) { +void _sway_seat_set_focus(struct sway_seat *seat, + struct sway_container *container, bool warp) { struct sway_container *last_focus = sway_seat_get_focus(seat); if (container && last_focus == container) { @@ -349,7 +349,9 @@ void sway_seat_set_focus(struct sway_seat *seat, if (new_output && new_output->type != C_OUTPUT) { new_output = container_parent(new_output, C_OUTPUT); } - if (new_output != last_output && config->mouse_warping) { + if (new_output && last_output && new_output != last_output + && config->mouse_warping && warp) { + wlr_log(L_DEBUG, "warpin the mouse baby"); struct wlr_output *output = new_output->sway_output->wlr_output; // TODO: Change container coords to layout coords double x = container->x + output->lx + container->width / 2.0; @@ -367,6 +369,11 @@ void sway_seat_set_focus(struct sway_seat *seat, seat->has_focus = (container != NULL); } +void sway_seat_set_focus(struct sway_seat *seat, + struct sway_container *container) { + _sway_seat_set_focus(seat, container, true); +} + struct sway_container *sway_seat_get_focus_inactive(struct sway_seat *seat, struct sway_container *container) { struct sway_seat_container *current = NULL; struct sway_container *parent = NULL;