aboutsummaryrefslogtreecommitdiffstats
path: root/sway/commands/focus.c
diff options
context:
space:
mode:
authorLibravatar William Wold <wm@wmww.sh>2018-09-09 22:47:58 -0700
committerLibravatar William Wold <wm@wmww.sh>2018-09-10 10:18:12 -0700
commite787a1581cc399ca7d953c9cd4d868499f5733a3 (patch)
tree3f14ab74cc6684867cdf41de76e0b833ad86783f /sway/commands/focus.c
parentMerge pull request #2613 from apreiml/fix_no_last_focus_fail (diff)
downloadsway-e787a1581cc399ca7d953c9cd4d868499f5733a3.tar.gz
sway-e787a1581cc399ca7d953c9cd4d868499f5733a3.tar.zst
sway-e787a1581cc399ca7d953c9cd4d868499f5733a3.zip
Give windows pointer focus immediately when they are switched to
Fixes #2401 (aka #2558) Previously, when switching windows, pointer focus was not changed until the pointer was moved. This makes the pointer enter happen immediately, without the side effects of other attempted fixes.
Diffstat (limited to 'sway/commands/focus.c')
-rw-r--r--sway/commands/focus.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/sway/commands/focus.c b/sway/commands/focus.c
index 668a0c7b..d63077e6 100644
--- a/sway/commands/focus.c
+++ b/sway/commands/focus.c
@@ -3,6 +3,7 @@
3#include "log.h" 3#include "log.h"
4#include "sway/commands.h" 4#include "sway/commands.h"
5#include "sway/input/input-manager.h" 5#include "sway/input/input-manager.h"
6#include "sway/input/cursor.h"
6#include "sway/input/seat.h" 7#include "sway/input/seat.h"
7#include "sway/output.h" 8#include "sway/output.h"
8#include "sway/tree/arrange.h" 9#include "sway/tree/arrange.h"
@@ -180,6 +181,7 @@ static struct cmd_results *focus_mode(struct sway_workspace *ws,
180 } 181 }
181 if (new_focus) { 182 if (new_focus) {
182 seat_set_focus_container(seat, new_focus); 183 seat_set_focus_container(seat, new_focus);
184 cursor_send_pointer_motion(seat->cursor, 0, true);
183 } else { 185 } else {
184 return cmd_results_new(CMD_FAILURE, "focus", 186 return cmd_results_new(CMD_FAILURE, "focus",
185 "Failed to find a %s container in workspace", 187 "Failed to find a %s container in workspace",
@@ -212,6 +214,7 @@ static struct cmd_results *focus_output(struct sway_seat *seat,
212 free(identifier); 214 free(identifier);
213 if (output) { 215 if (output) {
214 seat_set_focus(seat, seat_get_focus_inactive(seat, &output->node)); 216 seat_set_focus(seat, seat_get_focus_inactive(seat, &output->node));
217 cursor_send_pointer_motion(seat->cursor, 0, true);
215 } 218 }
216 219
217 return cmd_results_new(CMD_SUCCESS, NULL, NULL); 220 return cmd_results_new(CMD_SUCCESS, NULL, NULL);
@@ -232,6 +235,7 @@ struct cmd_results *cmd_focus(int argc, char **argv) {
232 235
233 if (argc == 0 && container) { 236 if (argc == 0 && container) {
234 seat_set_focus_container(seat, container); 237 seat_set_focus_container(seat, container);
238 cursor_send_pointer_motion(seat->cursor, 0, true);
235 return cmd_results_new(CMD_SUCCESS, NULL, NULL); 239 return cmd_results_new(CMD_SUCCESS, NULL, NULL);
236 } 240 }
237 241
@@ -260,6 +264,7 @@ struct cmd_results *cmd_focus(int argc, char **argv) {
260 struct sway_node *focus = seat_get_active_child(seat, node); 264 struct sway_node *focus = seat_get_active_child(seat, node);
261 if (focus) { 265 if (focus) {
262 seat_set_focus(seat, focus); 266 seat_set_focus(seat, focus);
267 cursor_send_pointer_motion(seat->cursor, 0, true);
263 } 268 }
264 return cmd_results_new(CMD_SUCCESS, NULL, NULL); 269 return cmd_results_new(CMD_SUCCESS, NULL, NULL);
265 } 270 }
@@ -279,6 +284,7 @@ struct cmd_results *cmd_focus(int argc, char **argv) {
279 struct sway_node *node = 284 struct sway_node *node =
280 get_node_in_output_direction(new_output, direction); 285 get_node_in_output_direction(new_output, direction);
281 seat_set_focus(seat, node); 286 seat_set_focus(seat, node);
287 cursor_send_pointer_motion(seat->cursor, 0, true);
282 return cmd_results_new(CMD_SUCCESS, NULL, NULL); 288 return cmd_results_new(CMD_SUCCESS, NULL, NULL);
283 } 289 }
284 290
@@ -286,6 +292,7 @@ struct cmd_results *cmd_focus(int argc, char **argv) {
286 node_get_in_direction(container, seat, direction); 292 node_get_in_direction(container, seat, direction);
287 if (next_focus) { 293 if (next_focus) {
288 seat_set_focus(seat, next_focus); 294 seat_set_focus(seat, next_focus);
295 cursor_send_pointer_motion(seat->cursor, 0, true);
289 } 296 }
290 297
291 return cmd_results_new(CMD_SUCCESS, NULL, NULL); 298 return cmd_results_new(CMD_SUCCESS, NULL, NULL);