aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2018-05-20 16:05:53 -0400
committerGitHub <noreply@github.com>2018-05-20 16:05:53 -0400
commitcf3ab1f45f29c62768975d64f38a7734372e4999 (patch)
treefabc0987827fe481fb4c48ca45ab9ca1921fca8b
parent4a035a25369db43c71a04e856839a7daacae681b (diff)
parent54445caefb8396269344d430b69d9d1e0796271d (diff)
Merge pull request #2007 from swaywm/fix-focus-follows-mouse
Fix focus_follows_mouse over swaybar
-rw-r--r--sway/input/cursor.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/sway/input/cursor.c b/sway/input/cursor.c
index 9259c475..3a73954c 100644
--- a/sway/input/cursor.c
+++ b/sway/input/cursor.c
@@ -146,7 +146,23 @@ void cursor_send_pointer_motion(struct sway_cursor *cursor, uint32_t time_msec)
struct sway_container *c = container_at_coords(cursor->seat,
cursor->cursor->x, cursor->cursor->y, &surface, &sx, &sy);
if (c && config->focus_follows_mouse) {
- seat_set_focus_warp(cursor->seat, c, false);
+ if (c->type == C_WORKSPACE) {
+ // Only follow the mouse if it would move to a new output
+ // Otherwise we'll focus the workspace, which is probably wrong
+ struct sway_container *focus = seat_get_focus(cursor->seat);
+ if (focus->type != C_OUTPUT) {
+ focus = container_parent(focus, C_OUTPUT);
+ }
+ struct sway_container *output = c;
+ if (output->type != C_OUTPUT) {
+ output = container_parent(c, C_OUTPUT);
+ }
+ if (output != focus) {
+ seat_set_focus_warp(cursor->seat, c, false);
+ }
+ } else {
+ seat_set_focus_warp(cursor->seat, c, false);
+ }
}
// reset cursor if switching between clients