summaryrefslogtreecommitdiff
path: root/src/layout/algorithm/tiled/scrolling
diff options
context:
space:
mode:
authormatjam <chrome@stupendous.net>2026-03-09 14:45:21 -0700
committerVaxry <43317083+vaxerski@users.noreply.github.com>2026-03-10 10:06:24 +0000
commitb9ddb4bb26275115e9c9ff03b3d87c6e2fd96c45 (patch)
tree2c8dd1d3b010bbecf841541a8fd9d2b1b7b1e1c5 /src/layout/algorithm/tiled/scrolling
parent8217dabc80814b6d2741dc0a75c8398fc770b26c (diff)
layout: fix crash on monitor reconnect due to stale workspace state
Guard against null/expired workspace and monitor pointers during layout recalculation triggered by arrangeMonitors after sleep/wake.
Diffstat (limited to 'src/layout/algorithm/tiled/scrolling')
-rw-r--r--src/layout/algorithm/tiled/scrolling/ScrollingAlgorithm.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/layout/algorithm/tiled/scrolling/ScrollingAlgorithm.cpp b/src/layout/algorithm/tiled/scrolling/ScrollingAlgorithm.cpp
index 7b9a1752..e3f326e8 100644
--- a/src/layout/algorithm/tiled/scrolling/ScrollingAlgorithm.cpp
+++ b/src/layout/algorithm/tiled/scrolling/ScrollingAlgorithm.cpp
@@ -422,7 +422,8 @@ SP<SColumnData> SScrollingData::atCenter() {
}
void SScrollingData::recalculate(bool forceInstant) {
- if (!algorithm->m_parent->space()->workspace() || algorithm->m_parent->space()->workspace()->m_hasFullscreenWindow)
+ if (!algorithm->m_parent || !algorithm->m_parent->space() || !algorithm->m_parent->space()->workspace() || !algorithm->m_parent->space()->workspace()->m_monitor ||
+ algorithm->m_parent->space()->workspace()->m_hasFullscreenWindow)
return;
static const auto PFSONONE = CConfigValue<Hyprlang::INT>("scrolling:fullscreen_on_one_column");
@@ -1505,6 +1506,9 @@ eScrollDirection CScrollingAlgorithm::getDynamicDirection() {
}
CBox CScrollingAlgorithm::usableArea() {
+ if (!m_parent || !m_parent->space())
+ return {};
+
CBox box = m_parent->space()->workArea();
// doesn't matter, this happens when this algo is about to be destroyed