summaryrefslogtreecommitdiffstats
path: root/sway/commands/floating.c
diff options
context:
space:
mode:
Diffstat (limited to 'sway/commands/floating.c')
-rw-r--r--sway/commands/floating.c21
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;