summaryrefslogtreecommitdiff
path: root/include/sway/tree/workspace.h
diff options
context:
space:
mode:
authorRonan Pigott <[email protected]>2020-11-01 23:43:07 -0700
committerTudor Brindus <[email protected]>2020-12-20 00:58:42 -0500
commit8eb0c54693e44e7c6126ce35045e34ad0f4d4607 (patch)
treef70faa5d8d809591909881e992323d5439d7f21d /include/sway/tree/workspace.h
parente95c299f0a724b7290a56f3ef81c9f9565bc9231 (diff)
introduce workspace_squash
workspace_squash is container_flatten in the reverse direction. Instead of eliminating redundant splits that are parents of the target container, it eliminates pairs of redundant H/V splits that are children of the workspace. Splits are redundant if a con and its grandchild have the same layout, and the immediate child has the opposite split. For example, layouts are transformed like: H[V[H[app1 app2]] app3] -> H[app1 app2 app3] i3 uses this operation to simplify the tree after moving heavily nested containers to a higher level in the tree via an orthogonal move.
Diffstat (limited to 'include/sway/tree/workspace.h')
-rw-r--r--include/sway/tree/workspace.h15
1 files changed, 15 insertions, 0 deletions
diff --git a/include/sway/tree/workspace.h b/include/sway/tree/workspace.h
index 3c9f93ed..fdd92f64 100644
--- a/include/sway/tree/workspace.h
+++ b/include/sway/tree/workspace.h
@@ -116,6 +116,13 @@ struct sway_container *workspace_add_tiling(struct sway_workspace *workspace,
void workspace_add_floating(struct sway_workspace *workspace,
struct sway_container *con);
+/**
+ * Adds a tiling container to the workspace without considering
+ * the workspace_layout, so the con will not be split.
+ */
+void workspace_insert_tiling_direct(struct sway_workspace *workspace,
+ struct sway_container *con, int index);
+
struct sway_container *workspace_insert_tiling(struct sway_workspace *workspace,
struct sway_container *con, int index);
@@ -134,4 +141,12 @@ size_t workspace_num_tiling_views(struct sway_workspace *ws);
size_t workspace_num_sticky_containers(struct sway_workspace *ws);
+/**
+ * workspace_squash is container_flatten in the reverse
+ * direction. Instead of eliminating redundant splits that are
+ * parents of the target container, it eliminates pairs of
+ * redundant H/V splits that are children of the workspace.
+ */
+void workspace_squash(struct sway_workspace *workspace);
+
#endif