From df55752241c81fe4faa73aa77b775eb12b3e3fa4 Mon Sep 17 00:00:00 2001 From: Nathan Ollerenshaw Date: Sun, 15 Mar 2026 08:06:10 -0700 Subject: algo/scroll: fix std::clamp assertion crash on resume from suspend (#13737) --- .../algorithm/tiled/scrolling/ScrollTapeController.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src/layout/algorithm/tiled/scrolling/ScrollTapeController.cpp') diff --git a/src/layout/algorithm/tiled/scrolling/ScrollTapeController.cpp b/src/layout/algorithm/tiled/scrolling/ScrollTapeController.cpp index 93a7dac1..6cd7da9c 100644 --- a/src/layout/algorithm/tiled/scrolling/ScrollTapeController.cpp +++ b/src/layout/algorithm/tiled/scrolling/ScrollTapeController.cpp @@ -240,7 +240,17 @@ void CScrollTapeController::fitStrip(size_t stripIndex, const CBox& usableArea, const double stripStart = calculateStripStart(stripIndex, usableArea, fullscreenOnOne); const double stripSize = calculateStripSize(stripIndex, usableArea, fullscreenOnOne); - m_offset = std::clamp(m_offset, stripStart - usablePrimary + stripSize, stripStart); + const double lo = stripStart - usablePrimary + stripSize; + const double hi = stripStart; + + if (lo > hi) { + // strip is wider than viewport (e.g. during monitor reconnection after suspend), + // center the strip instead of hitting the std::clamp assertion + m_offset = stripStart - (usablePrimary - stripSize) / 2.0; + return; + } + + m_offset = std::clamp(m_offset, lo, hi); } bool CScrollTapeController::isStripVisible(size_t stripIndex, const CBox& usableArea, bool fullscreenOnOne, bool full) const { -- cgit v1.2.3