commit 462ad4ea8380f29ad7a81d65bc144cb0ac6f5d8f
parent dc7a3930a7ffd4435c9215c7cce0afa37d06c91f
Author: Brian Ashworth <bosrsf04@gmail.com>
Date: Wed, 24 Apr 2019 20:28:19 -0400
cmd_move: respect workspace layout when inserting
When moving a container to become a direct child of the workspace and
the workspace's layout is tabbed or stacked, wrap it in a container
with the same layout. This allows for the following:
- Run `layout tabbed|stacked` on an empty workspace (or use
`workspace_layout tabbed|stacked` in the config)
- Open some views
- Move one of the views in any direction
- Open another view
- The new container should also be `tabbed`/`stacked`
Diffstat:
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/sway/tree/container.c b/sway/tree/container.c
@@ -1385,8 +1385,10 @@ void container_replace(struct sway_container *container,
root_scratchpad_show(container);
root_scratchpad_remove_container(container);
}
- container_add_sibling(container, replacement, 1);
- container_detach(container);
+ if (container->parent || container->workspace) {
+ container_add_sibling(container, replacement, 1);
+ container_detach(container);
+ }
if (scratchpad) {
root_scratchpad_add_container(replacement);
}
diff --git a/sway/tree/workspace.c b/sway/tree/workspace.c
@@ -688,6 +688,9 @@ void workspace_insert_tiling(struct sway_workspace *workspace,
if (con->workspace) {
container_detach(con);
}
+ if (workspace->layout == L_STACKED || workspace->layout == L_TABBED) {
+ con = container_split(con, workspace->layout);
+ }
list_insert(workspace->tiling, index, con);
con->workspace = workspace;
container_for_each_child(con, set_workspace, NULL);