summaryrefslogtreecommitdiff
path: root/src/layout/algorithm
diff options
context:
space:
mode:
authorVaxry <43317083+vaxerski@users.noreply.github.com>2026-02-26 12:00:05 +0000
committerGitHub <noreply@github.com>2026-02-26 12:00:05 +0000
commit0e9196867b4f602e1e5a599d4f3565faff615b3c (patch)
tree415bb14ec20164d4ad5d3f8075c867e56ce6b768 /src/layout/algorithm
parent1e06ab464ff1aa1e8d3f79b4aa702cab101edfb0 (diff)
algo/dwindle: fix focal point not being properly used in movedTarget (#13373)
Diffstat (limited to 'src/layout/algorithm')
-rw-r--r--src/layout/algorithm/tiled/dwindle/DwindleAlgorithm.cpp19
-rw-r--r--src/layout/algorithm/tiled/dwindle/DwindleAlgorithm.hpp2
2 files changed, 11 insertions, 10 deletions
diff --git a/src/layout/algorithm/tiled/dwindle/DwindleAlgorithm.cpp b/src/layout/algorithm/tiled/dwindle/DwindleAlgorithm.cpp
index 5b90bb46..f5e230f8 100644
--- a/src/layout/algorithm/tiled/dwindle/DwindleAlgorithm.cpp
+++ b/src/layout/algorithm/tiled/dwindle/DwindleAlgorithm.cpp
@@ -100,16 +100,14 @@ void CDwindleAlgorithm::addTarget(SP<ITarget> target, bool newTarget) {
OPENINGON = getClosestNode(MOUSECOORDS);
} else if (*PUSEACTIVE) {
- if (Desktop::focusState()->window() && !Desktop::focusState()->window()->m_isFloating && Desktop::focusState()->window() != target->window() &&
- Desktop::focusState()->window()->m_workspace == PWORKSPACE && Desktop::focusState()->window()->m_isMapped) {
- OPENINGON = getNodeFromWindow(Desktop::focusState()->window());
- } else {
- OPENINGON = getNodeFromWindow(g_pCompositor->vectorToWindowUnified(MOUSECOORDS, Desktop::View::RESERVED_EXTENTS | Desktop::View::INPUT_EXTENTS));
- }
+ const auto ACTIVE_WINDOW = Desktop::focusState()->window();
- if (!OPENINGON && g_pCompositor->isPointOnReservedArea(MOUSECOORDS, ACTIVE_MON))
- OPENINGON = getClosestNode(MOUSECOORDS);
+ if (!m_overrideFocalPoint && ACTIVE_WINDOW && !ACTIVE_WINDOW->m_isFloating && ACTIVE_WINDOW != target->window() && ACTIVE_WINDOW->m_workspace == PWORKSPACE &&
+ ACTIVE_WINDOW->m_isMapped)
+ OPENINGON = getNodeFromWindow(ACTIVE_WINDOW);
+ if (!OPENINGON)
+ OPENINGON = getClosestNode(MOUSECOORDS, target);
} else
OPENINGON = getFirstNode();
@@ -635,10 +633,13 @@ SP<SDwindleNodeData> CDwindleAlgorithm::getFirstNode() {
return m_dwindleNodesData.empty() ? nullptr : m_dwindleNodesData.at(0);
}
-SP<SDwindleNodeData> CDwindleAlgorithm::getClosestNode(const Vector2D& point) {
+SP<SDwindleNodeData> CDwindleAlgorithm::getClosestNode(const Vector2D& point, SP<ITarget> skip) {
SP<SDwindleNodeData> res = nullptr;
double distClosest = -1;
for (auto& n : m_dwindleNodesData) {
+ if (skip && n->pTarget == skip)
+ continue;
+
if (n->pTarget && Desktop::View::validMapped(n->pTarget->window())) {
auto distAnother = vecToRectDistanceSquared(point, n->box.pos(), n->box.pos() + n->box.size());
if (!res || distAnother < distClosest) {
diff --git a/src/layout/algorithm/tiled/dwindle/DwindleAlgorithm.hpp b/src/layout/algorithm/tiled/dwindle/DwindleAlgorithm.hpp
index 27c905a4..594b033b 100644
--- a/src/layout/algorithm/tiled/dwindle/DwindleAlgorithm.hpp
+++ b/src/layout/algorithm/tiled/dwindle/DwindleAlgorithm.hpp
@@ -45,7 +45,7 @@ namespace Layout::Tiled {
SP<SDwindleNodeData> getNodeFromWindow(PHLWINDOW w);
int getNodes();
SP<SDwindleNodeData> getFirstNode();
- SP<SDwindleNodeData> getClosestNode(const Vector2D&);
+ SP<SDwindleNodeData> getClosestNode(const Vector2D&, SP<ITarget> skip = nullptr);
SP<SDwindleNodeData> getMasterNode();
void toggleSplit(SP<SDwindleNodeData>);