summaryrefslogtreecommitdiff
path: root/src/layout/DwindleLayout.cpp
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2022-04-20 16:18:58 +0200
committervaxerski <43317083+vaxerski@users.noreply.github.com>2022-04-20 16:18:58 +0200
commit418e2d96aef0b52d1f93eb3dfe7d08906c7c719c (patch)
tree66002f952e2d7eb0a41408444fed90ecb0fa00f9 /src/layout/DwindleLayout.cpp
parentbebfe01d731a977c23c325dd37361f6d5f7268c2 (diff)
Added the movewindow dispatcher
Diffstat (limited to 'src/layout/DwindleLayout.cpp')
-rw-r--r--src/layout/DwindleLayout.cpp52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/layout/DwindleLayout.cpp b/src/layout/DwindleLayout.cpp
index 2af7a2e2..5b7ee165 100644
--- a/src/layout/DwindleLayout.cpp
+++ b/src/layout/DwindleLayout.cpp
@@ -726,4 +726,56 @@ SWindowRenderLayoutHints CHyprDwindleLayout::requestRenderHints(CWindow* pWindow
}
return hints;
+}
+
+void CHyprDwindleLayout::switchWindows(CWindow* pWindow, CWindow* pWindow2) {
+ // windows should be valid, insallah
+
+ const auto PNODE = getNodeFromWindow(pWindow);
+ const auto PNODE2 = getNodeFromWindow(pWindow2);
+
+ if (!PNODE2 || !PNODE)
+ return;
+
+ // we will not delete the nodes, just fix the tree
+ if (PNODE2->pParent == PNODE->pParent) {
+ const auto PPARENT = PNODE->pParent;
+
+ if (PPARENT->children[0] == PNODE) {
+ PPARENT->children[0] = PNODE2;
+ PPARENT->children[1] = PNODE;
+ } else {
+ PPARENT->children[0] = PNODE;
+ PPARENT->children[1] = PNODE2;
+ }
+ } else {
+ if (PNODE->pParent) {
+ const auto PPARENT = PNODE->pParent;
+
+ if (PPARENT->children[0] == PNODE) {
+ PPARENT->children[0] = PNODE2;
+ } else {
+ PPARENT->children[1] = PNODE2;
+ }
+ }
+
+ if (PNODE2->pParent) {
+ const auto PPARENT = PNODE2->pParent;
+
+ if (PPARENT->children[0] == PNODE2) {
+ PPARENT->children[0] = PNODE;
+ } else {
+ PPARENT->children[1] = PNODE;
+ }
+ }
+ }
+
+ const auto PPARENTNODE2 = PNODE2->pParent;
+ PNODE2->pParent = PNODE->pParent;
+ PNODE->pParent = PPARENTNODE2;
+
+ // these are window nodes, so no children.
+
+ // recalc the workspace
+ getMasterNodeOnWorkspace(PNODE->workspaceID)->recalcSizePosRecursive();
} \ No newline at end of file