diff options
-rw-r--r-- | include/sway/input/seat.h | 1 | ||||
-rw-r--r-- | sway/commands/move.c | 2 | ||||
-rw-r--r-- | sway/input/seat.c | 13 |
3 files changed, 12 insertions, 4 deletions
diff --git a/include/sway/input/seat.h b/include/sway/input/seat.h index 921373d4..be95567e 100644 --- a/include/sway/input/seat.h +++ b/include/sway/input/seat.h | |||
@@ -51,6 +51,7 @@ struct sway_seat { | |||
51 | 51 | ||
52 | bool has_focus; | 52 | bool has_focus; |
53 | struct wl_list focus_stack; // list of containers in focus order | 53 | struct wl_list focus_stack; // list of containers in focus order |
54 | struct sway_workspace *workspace; | ||
54 | 55 | ||
55 | // If the focused layer is set, views cannot receive keyboard focus | 56 | // If the focused layer is set, views cannot receive keyboard focus |
56 | struct wlr_layer_surface_v1 *focused_layer; | 57 | struct wlr_layer_surface_v1 *focused_layer; |
diff --git a/sway/commands/move.c b/sway/commands/move.c index 215ffe27..24036f36 100644 --- a/sway/commands/move.c +++ b/sway/commands/move.c | |||
@@ -704,7 +704,7 @@ static struct cmd_results *cmd_move_in_direction( | |||
704 | } | 704 | } |
705 | 705 | ||
706 | // Hack to re-focus container | 706 | // Hack to re-focus container |
707 | seat_set_focus_workspace(config->handler_context.seat, new_ws); | 707 | seat_set_raw_focus(config->handler_context.seat, &new_ws->node); |
708 | seat_set_focus_container(config->handler_context.seat, container); | 708 | seat_set_focus_container(config->handler_context.seat, container); |
709 | 709 | ||
710 | if (old_ws != new_ws) { | 710 | if (old_ws != new_ws) { |
diff --git a/sway/input/seat.c b/sway/input/seat.c index 6dbd1900..c7deabed 100644 --- a/sway/input/seat.c +++ b/sway/input/seat.c | |||
@@ -623,6 +623,15 @@ static void container_raise_floating(struct sway_container *con) { | |||
623 | } | 623 | } |
624 | } | 624 | } |
625 | 625 | ||
626 | static void set_workspace(struct sway_seat *seat, | ||
627 | struct sway_workspace *new_ws) { | ||
628 | if (seat->workspace == new_ws) { | ||
629 | return; | ||
630 | } | ||
631 | ipc_event_workspace(seat->workspace, new_ws, "focus"); | ||
632 | seat->workspace = new_ws; | ||
633 | } | ||
634 | |||
626 | void seat_set_raw_focus(struct sway_seat *seat, struct sway_node *node) { | 635 | void seat_set_raw_focus(struct sway_seat *seat, struct sway_node *node) { |
627 | struct sway_seat_node *seat_node = seat_node_from_node(seat, node); | 636 | struct sway_seat_node *seat_node = seat_node_from_node(seat, node); |
628 | wl_list_remove(&seat_node->link); | 637 | wl_list_remove(&seat_node->link); |
@@ -709,9 +718,7 @@ void seat_set_focus_warp(struct sway_seat *seat, struct sway_node *node, | |||
709 | } | 718 | } |
710 | 719 | ||
711 | // emit ipc events | 720 | // emit ipc events |
712 | if (new_workspace && last_workspace != new_workspace) { | 721 | set_workspace(seat, new_workspace); |
713 | ipc_event_workspace(last_workspace, new_workspace, "focus"); | ||
714 | } | ||
715 | if (container && container->view) { | 722 | if (container && container->view) { |
716 | ipc_event_window(container, "focus"); | 723 | ipc_event_window(container, "focus"); |
717 | } | 724 | } |