diff options
Diffstat (limited to 'sway/commands')
| -rw-r--r-- | sway/commands/floating.c | 13 | ||||
| -rw-r--r-- | sway/commands/move.c | 10 | 
2 files changed, 18 insertions, 5 deletions
| diff --git a/sway/commands/floating.c b/sway/commands/floating.c index 6ab56c3b..b67e736f 100644 --- a/sway/commands/floating.c +++ b/sway/commands/floating.c @@ -17,9 +17,16 @@ struct cmd_results *cmd_floating(int argc, char **argv) {  	}  	struct sway_container *container =  		config->handler_context.current_container; -	if (container->type != C_VIEW) { -		// TODO: This doesn't strictly speaking have to be true -		return cmd_results_new(CMD_INVALID, "float", "Only views can float"); +	if (container->type == C_WORKSPACE && container->children->length == 0) { +		return cmd_results_new(CMD_INVALID, "floating", +				"Can't float an empty workspace"); +	} +	if (container->type == C_WORKSPACE) { +		// Wrap the workspace's children in a container so we can float it +		struct sway_container *workspace = container; +		container = container_wrap_children(container); +		workspace->layout = L_HORIZ; +		seat_set_focus(config->handler_context.seat, container);  	}  	bool wants_floating; diff --git a/sway/commands/move.c b/sway/commands/move.c index aede3d6c..b127c89f 100644 --- a/sway/commands/move.c +++ b/sway/commands/move.c @@ -298,9 +298,15 @@ static struct cmd_results *move_to_position(struct sway_container *container,  }  static struct cmd_results *move_to_scratchpad(struct sway_container *con) { -	if (con->type != C_CONTAINER && con->type != C_VIEW) { +	if (con->type == C_WORKSPACE && con->children->length == 0) {  		return cmd_results_new(CMD_INVALID, "move", -				"Only views and containers can be moved to the scratchpad"); +				"Can't move an empty workspace to the scratchpad"); +	} +	if (con->type == C_WORKSPACE) { +		// Wrap the workspace's children in a container +		struct sway_container *workspace = con; +		con = container_wrap_children(con); +		workspace->layout = L_HORIZ;  	}  	if (con->scratchpad) {  		return cmd_results_new(CMD_INVALID, "move", | 
