aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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)
146 struct sway_container *c = container_at_coords(cursor->seat, 146 struct sway_container *c = container_at_coords(cursor->seat,
147 cursor->cursor->x, cursor->cursor->y, &surface, &sx, &sy); 147 cursor->cursor->x, cursor->cursor->y, &surface, &sx, &sy);
148 if (c && config->focus_follows_mouse) { 148 if (c && config->focus_follows_mouse) {
149 seat_set_focus_warp(cursor->seat, c, false); 149 if (c->type == C_WORKSPACE) {
150 // Only follow the mouse if it would move to a new output
151 // Otherwise we'll focus the workspace, which is probably wrong
152 struct sway_container *focus = seat_get_focus(cursor->seat);
153 if (focus->type != C_OUTPUT) {
154 focus = container_parent(focus, C_OUTPUT);
155 }
156 struct sway_container *output = c;
157 if (output->type != C_OUTPUT) {
158 output = container_parent(c, C_OUTPUT);
159 }
160 if (output != focus) {
161 seat_set_focus_warp(cursor->seat, c, false);
162 }
163 } else {
164 seat_set_focus_warp(cursor->seat, c, false);
165 }
150 } 166 }
151 167
152 // reset cursor if switching between clients 168 // reset cursor if switching between clients