From 2928d6af0ad1fa9f950c4ea8394739a468b5e34f Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Sat, 28 Feb 2026 23:06:27 +0000 Subject: layouts: fix crash on missed relayout updates (#13444) --- src/layout/LayoutManager.cpp | 8 +------- src/layout/space/Space.cpp | 7 +++++++ src/layout/space/Space.hpp | 3 +++ 3 files changed, 11 insertions(+), 7 deletions(-) (limited to 'src/layout') diff --git a/src/layout/LayoutManager.cpp b/src/layout/LayoutManager.cpp index bcbf8438..56fa508d 100644 --- a/src/layout/LayoutManager.cpp +++ b/src/layout/LayoutManager.cpp @@ -11,13 +11,7 @@ using namespace Layout; -CLayoutManager::CLayoutManager() { - static auto P = Event::bus()->m_events.monitor.layoutChanged.listen([] { - for (const auto& ws : g_pCompositor->getWorkspaces()) { - ws->m_space->recheckWorkArea(); - } - }); -} +CLayoutManager::CLayoutManager() = default; void CLayoutManager::newTarget(SP target, SP space) { // on a new target: remember desired pos for float, if available diff --git a/src/layout/space/Space.cpp b/src/layout/space/Space.cpp index 742c398a..33e5bb8c 100644 --- a/src/layout/space/Space.cpp +++ b/src/layout/space/Space.cpp @@ -6,6 +6,7 @@ #include "../../debug/log/Logger.hpp" #include "../../desktop/Workspace.hpp" #include "../../config/ConfigManager.hpp" +#include "../../event/EventBus.hpp" using namespace Layout; @@ -17,6 +18,12 @@ SP CSpace::create(PHLWORKSPACE w) { CSpace::CSpace(PHLWORKSPACE parent) : m_parent(parent) { recheckWorkArea(); + + // NOLINTNEXTLINE + m_geomUpdateCallback = Event::bus()->m_events.monitor.layoutChanged.listen([this] { + recheckWorkArea(); + m_algorithm->recalculate(); + }); } void CSpace::add(SP t) { diff --git a/src/layout/space/Space.hpp b/src/layout/space/Space.hpp index 4229e99d..ff3d18e6 100644 --- a/src/layout/space/Space.hpp +++ b/src/layout/space/Space.hpp @@ -63,5 +63,8 @@ namespace Layout { // work area is in global coords CBox m_workArea, m_floatingWorkArea; + + // for recalc + CHyprSignalListener m_geomUpdateCallback; }; }; \ No newline at end of file -- cgit v1.2.3