From e3af8057c772c57b1a7edac9d552c244f1a2849e Mon Sep 17 00:00:00 2001 From: wheaney <42350981+wheaney@users.noreply.github.com> Date: Wed, 24 Sep 2025 16:41:23 -0700 Subject: [PATCH] Attempt to fix a crash on glasses disconnect --- kwin/src/breezydesktopeffect.cpp | 15 +++++++++++++-- kwin/src/qml/main.qml | 4 ++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/kwin/src/breezydesktopeffect.cpp b/kwin/src/breezydesktopeffect.cpp index f3e2ceb..723834b 100644 --- a/kwin/src/breezydesktopeffect.cpp +++ b/kwin/src/breezydesktopeffect.cpp @@ -310,6 +310,10 @@ void BreezyDesktopEffect::activate() void BreezyDesktopEffect::deactivate() { qCCritical(KWIN_XR) << "\t\t\tBreezy - deactivate"; + + m_effectTargetScreenIndex = -1; + invalidateEffectOnScreenGeometryCache(); + disconnect(effects, &EffectsHandler::cursorShapeChanged, this, &BreezyDesktopEffect::updateCursorImage); m_cursorUpdateTimer->stop(); showCursor(); @@ -894,9 +898,16 @@ bool BreezyDesktopEffect::updateEffectOnScreenGeometryCache() if (m_effectTargetScreenIndex == -1) return false; - Output *effectOnScreen = effects->screens().at(m_effectTargetScreenIndex); - if (!effectOnScreen) + const auto screensList = effects->screens(); + if (m_effectTargetScreenIndex >= screensList.count()) { + m_effectTargetScreenIndex = -1; return false; + } + Output *effectOnScreen = screensList.at(m_effectTargetScreenIndex); + if (!effectOnScreen) { + m_effectTargetScreenIndex = -1; + return false; + } const QRect geometry = effectOnScreen->geometry(); const int marginX = (m_cursorImageSize.width() > 0) ? m_cursorImageSize.width() : 10; diff --git a/kwin/src/qml/main.qml b/kwin/src/qml/main.qml index 2d0bb71..60fa8ac 100644 --- a/kwin/src/qml/main.qml +++ b/kwin/src/qml/main.qml @@ -143,6 +143,10 @@ Item { if (targetScreenSupported) effect.effectTargetScreenIndex = KWinComponents.Workspace.screens.indexOf(targetScreen); } + onScreensChanged: { + checkLoadedComponent(); + } + onImuResetStateChanged: { checkLoadedComponent(); }