summaryrefslogtreecommitdiff
path: root/src/layout
diff options
context:
space:
mode:
Diffstat (limited to 'src/layout')
-rw-r--r--src/layout/algorithm/Algorithm.cpp5
-rw-r--r--src/layout/algorithm/tiled/scrolling/ScrollingAlgorithm.cpp6
-rw-r--r--src/layout/space/Space.cpp10
3 files changed, 18 insertions, 3 deletions
diff --git a/src/layout/algorithm/Algorithm.cpp b/src/layout/algorithm/Algorithm.cpp
index cfb5b7e3..b83a03a3 100644
--- a/src/layout/algorithm/Algorithm.cpp
+++ b/src/layout/algorithm/Algorithm.cpp
@@ -105,7 +105,10 @@ void CAlgorithm::recalculate() {
m_floating->recalculate();
const auto PWORKSPACE = m_space->workspace();
- const auto PMONITOR = PWORKSPACE->m_monitor;
+ if (!PWORKSPACE)
+ return;
+
+ const auto PMONITOR = PWORKSPACE->m_monitor;
if (PWORKSPACE->m_hasFullscreenWindow && PMONITOR) {
// massive hack from the fullscreen func
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
diff --git a/src/layout/space/Space.cpp b/src/layout/space/Space.cpp
index db3925f6..a02ba517 100644
--- a/src/layout/space/Space.cpp
+++ b/src/layout/space/Space.cpp
@@ -21,8 +21,16 @@ CSpace::CSpace(PHLWORKSPACE parent) : m_parent(parent) {
// NOLINTNEXTLINE
m_geomUpdateCallback = Event::bus()->m_events.monitor.layoutChanged.listen([this] {
+ // During monitor disconnect/reconnect (e.g. sleep/wake), some workspaces
+ // may have stale or null monitors. Guard against that to avoid crashing
+ // when recalculating layout for workspaces mid-migration.
+ if (!m_parent || !m_parent->m_monitor)
+ return;
+
recheckWorkArea();
- m_algorithm->recalculate();
+
+ if (m_algorithm)
+ m_algorithm->recalculate();
});
}