diff options
author | Drew DeVault <sir@cmpwn.com> | 2018-03-31 11:18:29 -0400 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2018-03-31 13:05:45 -0400 |
commit | b9d2983324c91f0a2805b1f10afcf2a929f939b4 (patch) | |
tree | 2a6346a760d051e01142770a16d6b92365ca01ce /sway | |
parent | 9b38ef950fcf293ba11f54c14d8b3a87f050b154 (diff) |
Fix interaction between warping and following
Diffstat (limited to 'sway')
-rw-r--r-- | sway/input/cursor.c | 5 | ||||
-rw-r--r-- | 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; |