diff options
Diffstat (limited to 'sway/commands/floating.c')
-rw-r--r-- | sway/commands/floating.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/sway/commands/floating.c b/sway/commands/floating.c index 6ab56c3b..31de5ec3 100644 --- a/sway/commands/floating.c +++ b/sway/commands/floating.c | |||
@@ -17,9 +17,24 @@ struct cmd_results *cmd_floating(int argc, char **argv) { | |||
17 | } | 17 | } |
18 | struct sway_container *container = | 18 | struct sway_container *container = |
19 | config->handler_context.current_container; | 19 | config->handler_context.current_container; |
20 | if (container->type != C_VIEW) { | 20 | if (container->type == C_WORKSPACE && container->children->length == 0) { |
21 | // TODO: This doesn't strictly speaking have to be true | 21 | return cmd_results_new(CMD_INVALID, "floating", |
22 | return cmd_results_new(CMD_INVALID, "float", "Only views can float"); | 22 | "Can't float an empty workspace"); |
23 | } | ||
24 | if (container->type == C_WORKSPACE) { | ||
25 | // Wrap the workspace's children in a container so we can float it | ||
26 | struct sway_container *workspace = container; | ||
27 | container = container_wrap_children(container); | ||
28 | workspace->layout = L_HORIZ; | ||
29 | seat_set_focus(config->handler_context.seat, container); | ||
30 | } | ||
31 | |||
32 | // If the container is in a floating split container, | ||
33 | // operate on the split container instead of the child. | ||
34 | if (container_is_floating_or_child(container)) { | ||
35 | while (container->parent->layout != L_FLOATING) { | ||
36 | container = container->parent; | ||
37 | } | ||
23 | } | 38 | } |
24 | 39 | ||
25 | bool wants_floating; | 40 | bool wants_floating; |