From 8a12d6cf7e3b11ea46e6d76f219b1d1cdde9e797 Mon Sep 17 00:00:00 2001 From: Nikolai Nechaev Date: Tue, 10 Mar 2026 19:04:21 +0900 Subject: algo/dwindle: Respect `force_split` when moving windows to workspaces (#13038) Respect `dwindle:force_split` not only when mapping new windows, but also when moving windows to workspaces. Fixes #13009. --- .../algorithm/tiled/dwindle/DwindleAlgorithm.cpp | 18 ++++++++---------- .../algorithm/tiled/dwindle/DwindleAlgorithm.hpp | 4 ++-- 2 files changed, 10 insertions(+), 12 deletions(-) (limited to 'src/layout/algorithm/tiled') diff --git a/src/layout/algorithm/tiled/dwindle/DwindleAlgorithm.cpp b/src/layout/algorithm/tiled/dwindle/DwindleAlgorithm.cpp index 4c9622c3..531b54d8 100644 --- a/src/layout/algorithm/tiled/dwindle/DwindleAlgorithm.cpp +++ b/src/layout/algorithm/tiled/dwindle/DwindleAlgorithm.cpp @@ -71,7 +71,7 @@ void CDwindleAlgorithm::newTarget(SP target) { addTarget(target); } -void CDwindleAlgorithm::addTarget(SP target, bool newTarget) { +void CDwindleAlgorithm::addTarget(SP target) { const auto WORK_AREA = m_parent->space()->workArea(); const auto PNODE = m_dwindleNodesData.emplace_back(makeShared()); @@ -215,7 +215,7 @@ void CDwindleAlgorithm::addTarget(SP target, bool newTarget) { NEWPARENT->children[1] = OPENINGON; } } - } else if (*PFORCESPLIT == 0 || !newTarget || m_overrideFocalPoint) { + } else if (*PFORCESPLIT == 0 || m_overrideFocalPoint) { if ((SIDEBYSIDE && MOUSECOORDS.x < NEWPARENT->box.x + (NEWPARENT->box.w / 2.F)) || (!SIDEBYSIDE && MOUSECOORDS.y < NEWPARENT->box.y + (NEWPARENT->box.h / 2.F))) { // we are hovering over the first node, make PNODE first. NEWPARENT->children[1] = OPENINGON; @@ -225,14 +225,12 @@ void CDwindleAlgorithm::addTarget(SP target, bool newTarget) { NEWPARENT->children[0] = OPENINGON; NEWPARENT->children[1] = PNODE; } + } else if (*PFORCESPLIT == 1) { + NEWPARENT->children[1] = OPENINGON; + NEWPARENT->children[0] = PNODE; } else { - if (*PFORCESPLIT == 1) { - NEWPARENT->children[1] = OPENINGON; - NEWPARENT->children[0] = PNODE; - } else { - NEWPARENT->children[0] = OPENINGON; - NEWPARENT->children[1] = PNODE; - } + NEWPARENT->children[0] = OPENINGON; + NEWPARENT->children[1] = PNODE; } // split in favor of a specific window @@ -268,7 +266,7 @@ void CDwindleAlgorithm::addTarget(SP target, bool newTarget) { void CDwindleAlgorithm::movedTarget(SP target, std::optional focalPoint) { m_overrideFocalPoint = focalPoint; - addTarget(target, false); + addTarget(target); m_overrideFocalPoint.reset(); } diff --git a/src/layout/algorithm/tiled/dwindle/DwindleAlgorithm.hpp b/src/layout/algorithm/tiled/dwindle/DwindleAlgorithm.hpp index 41cbf8bb..043f8738 100644 --- a/src/layout/algorithm/tiled/dwindle/DwindleAlgorithm.hpp +++ b/src/layout/algorithm/tiled/dwindle/DwindleAlgorithm.hpp @@ -39,7 +39,7 @@ namespace Layout::Tiled { std::optional m_overrideFocalPoint; // for onWindowCreatedTiling. - void addTarget(SP target, bool newTarget = true); + void addTarget(SP target); void calculateWorkspace(); SP getNodeFromTarget(SP); SP getNodeFromWindow(PHLWINDOW w); @@ -55,4 +55,4 @@ namespace Layout::Tiled { Math::eDirection m_overrideDirection = Math::DIRECTION_DEFAULT; }; -}; \ No newline at end of file +}; -- cgit v1.2.3