diff options
| author | emersion <contact@emersion.fr> | 2018-10-06 14:53:09 +0200 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-10-06 14:53:09 +0200 | 
| commit | 0f45aa4ea9115f3f6a586efe7ff748e26d70bf7e (patch) | |
| tree | e574ca18b226531da7fc67dbcc4720cbfa2eedbb /sway/input | |
| parent | 5d21c33f13f34ed592388512cc092986324c8f35 (diff) | |
| parent | c620f76bea08bdab6cfa17a5b3128a4924c6df4d (diff) | |
| download | sway-0f45aa4ea9115f3f6a586efe7ff748e26d70bf7e.tar.xz | |
Merge pull request #2693 from RyanDwyer/move-sticky-in-seat
Move sticky containers when switching workspace via criteria
Diffstat (limited to 'sway/input')
| -rw-r--r-- | sway/input/seat.c | 30 | 
1 files changed, 20 insertions, 10 deletions
diff --git a/sway/input/seat.c b/sway/input/seat.c index 675edb2d..f5cb2f9e 100644 --- a/sway/input/seat.c +++ b/sway/input/seat.c @@ -667,10 +667,8 @@ void seat_set_focus_warp(struct sway_seat *seat, struct sway_node *node,  	}  	// find new output's old workspace, which might have to be removed if empty -	struct sway_workspace *new_output_last_ws = NULL; -	if (new_output && last_output != new_output) { -		new_output_last_ws = output_get_active_workspace(new_output); -	} +	struct sway_workspace *new_output_last_ws = +		new_output ? output_get_active_workspace(new_output) : NULL;  	// Unfocus the previous focus  	if (last_focus) { @@ -719,8 +717,17 @@ void seat_set_focus_warp(struct sway_seat *seat, struct sway_node *node,  		ipc_event_window(container, "focus");  	} -	if (new_output_last_ws) { -		workspace_consider_destroy(new_output_last_ws); +	// Move sticky containers to new workspace +	if (new_output_last_ws && new_workspace != new_output_last_ws) { +		for (int i = 0; i < new_output_last_ws->floating->length; ++i) { +			struct sway_container *floater = +				new_output_last_ws->floating->items[i]; +			if (floater->is_sticky) { +				container_detach(floater); +				workspace_add_floating(new_workspace, floater); +				--i; +			} +		}  	}  	// Close any popups on the old focus @@ -754,11 +761,14 @@ void seat_set_focus_warp(struct sway_seat *seat, struct sway_node *node,  		container_raise_floating(container);  	} -	if (last_focus) { -		if (last_workspace) { -			workspace_consider_destroy(last_workspace); -		} +	if (new_output_last_ws) { +		workspace_consider_destroy(new_output_last_ws); +	} +	if (last_workspace && last_workspace != new_output_last_ws) { +		workspace_consider_destroy(last_workspace); +	} +	if (last_focus) {  		if (config->mouse_warping && warp && new_output != last_output) {  			double x = 0;  			double y = 0;  | 
