diff options
Diffstat (limited to 'sway/commands/move.c')
-rw-r--r-- | sway/commands/move.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/sway/commands/move.c b/sway/commands/move.c index aede3d6c..1aae3838 100644 --- a/sway/commands/move.c +++ b/sway/commands/move.c | |||
@@ -298,10 +298,25 @@ static struct cmd_results *move_to_position(struct sway_container *container, | |||
298 | } | 298 | } |
299 | 299 | ||
300 | static struct cmd_results *move_to_scratchpad(struct sway_container *con) { | 300 | static struct cmd_results *move_to_scratchpad(struct sway_container *con) { |
301 | if (con->type != C_CONTAINER && con->type != C_VIEW) { | 301 | if (con->type == C_WORKSPACE && con->children->length == 0) { |
302 | return cmd_results_new(CMD_INVALID, "move", | 302 | return cmd_results_new(CMD_INVALID, "move", |
303 | "Only views and containers can be moved to the scratchpad"); | 303 | "Can't move an empty workspace to the scratchpad"); |
304 | } | 304 | } |
305 | if (con->type == C_WORKSPACE) { | ||
306 | // Wrap the workspace's children in a container | ||
307 | struct sway_container *workspace = con; | ||
308 | con = container_wrap_children(con); | ||
309 | workspace->layout = L_HORIZ; | ||
310 | } | ||
311 | |||
312 | // If the container is in a floating split container, | ||
313 | // operate on the split container instead of the child. | ||
314 | if (container_is_floating_or_child(con)) { | ||
315 | while (con->parent->layout != L_FLOATING) { | ||
316 | con = con->parent; | ||
317 | } | ||
318 | } | ||
319 | |||
305 | if (con->scratchpad) { | 320 | if (con->scratchpad) { |
306 | return cmd_results_new(CMD_INVALID, "move", | 321 | return cmd_results_new(CMD_INVALID, "move", |
307 | "Container is already in the scratchpad"); | 322 | "Container is already in the scratchpad"); |