diff options
| -rw-r--r-- | sway/commands/floating.c | 5 | ||||
| -rw-r--r-- | sway/commands/move.c | 9 | ||||
| -rw-r--r-- | sway/commands/resize.c | 5 | ||||
| -rw-r--r-- | sway/commands/split.c | 4 | ||||
| -rw-r--r-- | sway/commands/sticky.c | 3 | ||||
| -rw-r--r-- | sway/tree/root.c | 3 | 
6 files changed, 28 insertions, 1 deletions
| diff --git a/sway/commands/floating.c b/sway/commands/floating.c index e95f3185..57bf0017 100644 --- a/sway/commands/floating.c +++ b/sway/commands/floating.c @@ -40,6 +40,11 @@ struct cmd_results *cmd_floating(int argc, char **argv) {  		}  	} +	if (container->scratchpad && !container->workspace) { +		return cmd_results_new(CMD_FAILURE, +				"Cannot set floating status on a hidden scratchpad container"); +	} +  	bool wants_floating =   		parse_boolean(argv[0], container_is_floating(container)); diff --git a/sway/commands/move.c b/sway/commands/move.c index d4fe2f01..d4b55922 100644 --- a/sway/commands/move.c +++ b/sway/commands/move.c @@ -653,6 +653,10 @@ static struct cmd_results *cmd_move_in_direction(  		return cmd_results_new(CMD_FAILURE,  				"Cannot move workspaces in a direction");  	} +	if (container->scratchpad && !container->workspace) { +		return cmd_results_new(CMD_FAILURE, +				"Cannot move a hidden scratchpad container"); +	}  	if (container_is_floating(container)) {  		if (container->is_fullscreen) {  			return cmd_results_new(CMD_FAILURE, @@ -720,6 +724,11 @@ static struct cmd_results *cmd_move_to_position(int argc, char **argv) {  		return cmd_results_new(CMD_FAILURE, "Only floating containers "  				"can be moved to an absolute position");  	} +	if (container->scratchpad && !container->workspace) { +		return cmd_results_new(CMD_FAILURE, +				"Cannot move a hidden scratchpad container"); +	} +  	if (!argc) {  		return cmd_results_new(CMD_FAILURE, expected_position_syntax);  	} diff --git a/sway/commands/resize.c b/sway/commands/resize.c index 6cdeb90c..d840f26c 100644 --- a/sway/commands/resize.c +++ b/sway/commands/resize.c @@ -589,6 +589,11 @@ struct cmd_results *cmd_resize(int argc, char **argv) {  	if (!current) {  		return cmd_results_new(CMD_INVALID, "Cannot resize nothing");  	} +	if (current->scratchpad && !current->workspace) { +		return cmd_results_new(CMD_FAILURE, +				"Cannot resize a hidden scratchpad container"); +	} +  	struct cmd_results *error;  	if ((error = checkarg(argc, "resize", EXPECTED_AT_LEAST, 2))) { diff --git a/sway/commands/split.c b/sway/commands/split.c index ed370d26..06b7df5e 100644 --- a/sway/commands/split.c +++ b/sway/commands/split.c @@ -13,6 +13,10 @@ static struct cmd_results *do_split(int layout) {  	struct sway_container *con = config->handler_context.container;  	struct sway_workspace *ws = config->handler_context.workspace;  	if (con) { +		if (con->scratchpad && !con->workspace) { +			return cmd_results_new(CMD_FAILURE, +					"Cannot split a hidden scratchpad container"); +		}  		container_split(con, layout);  	} else {  		workspace_split(ws, layout); diff --git a/sway/commands/sticky.c b/sway/commands/sticky.c index 6cac8a45..15b726cc 100644 --- a/sway/commands/sticky.c +++ b/sway/commands/sticky.c @@ -29,7 +29,8 @@ struct cmd_results *cmd_sticky(int argc, char **argv) {  	container->is_sticky = parse_boolean(argv[0], container->is_sticky); -	if (container->is_sticky) { +	if (container->is_sticky && +			(!container->scratchpad || container->workspace)) {  		// move container to active workspace  		struct sway_workspace *active_workspace =  			output_get_active_workspace(container->workspace->output); diff --git a/sway/tree/root.c b/sway/tree/root.c index e1624863..e5df8dd1 100644 --- a/sway/tree/root.c +++ b/sway/tree/root.c @@ -87,6 +87,9 @@ void root_scratchpad_remove_container(struct sway_container *con) {  	if (!sway_assert(con->scratchpad, "Container is not in scratchpad")) {  		return;  	} +	if (!con->workspace) { +		root_scratchpad_show(con); +	}  	con->scratchpad = false;  	int index = list_find(root->scratchpad, con);  	if (index != -1) { | 
