diff options
Diffstat (limited to 'sway')
| -rw-r--r-- | sway/commands/move.c | 2 | ||||
| -rw-r--r-- | sway/input/seat.c | 13 | 
2 files changed, 11 insertions, 4 deletions
| 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(  	}  	// Hack to re-focus container -	seat_set_focus_workspace(config->handler_context.seat, new_ws); +	seat_set_raw_focus(config->handler_context.seat, &new_ws->node);  	seat_set_focus_container(config->handler_context.seat, container);  	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) {  	}  } +static void set_workspace(struct sway_seat *seat, +		struct sway_workspace *new_ws) { +	if (seat->workspace == new_ws) { +		return; +	} +	ipc_event_workspace(seat->workspace, new_ws, "focus"); +	seat->workspace = new_ws; +} +  void seat_set_raw_focus(struct sway_seat *seat, struct sway_node *node) {  	struct sway_seat_node *seat_node = seat_node_from_node(seat, node);  	wl_list_remove(&seat_node->link); @@ -709,9 +718,7 @@ void seat_set_focus_warp(struct sway_seat *seat, struct sway_node *node,  	}  	// emit ipc events -	if (new_workspace && last_workspace != new_workspace) { -		 ipc_event_workspace(last_workspace, new_workspace, "focus"); -	} +	set_workspace(seat, new_workspace);  	if (container && container->view) {  		ipc_event_window(container, "focus");  	} | 
