diff options
| author | Furkan Sahin <furkan-dev@proton.me> | 2019-04-24 20:28:19 -0400 |
|---|---|---|
| committer | Furkan Sahin <furkan-dev@proton.me> | 2019-04-24 20:28:19 -0400 |
| commit | 2cab55fad63fa7890ee45084da76f12b46348093 (patch) | |
| tree | 7d83afea78abc6b9e754b05e156ab25b22dce972 | |
| parent | f2897323652fc05e1736e78c8ed4f97b373fc88f (diff) | |
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`
| -rw-r--r-- | sway/tree/container.c | 6 | ||||
| -rw-r--r-- | sway/tree/workspace.c | 3 |
2 files changed, 7 insertions, 2 deletions
diff --git a/sway/tree/container.c b/sway/tree/container.c index 11ed4f98..c4d21f0a 100644 --- 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 index 68a55e03..1a1f5c49 100644 --- 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); |
