From 8967c006668028df14b13c8c5c3e6f343bbb4df9 Mon Sep 17 00:00:00 2001 From: wheaney <42350981+wheaney@users.noreply.github.com> Date: Mon, 8 Sep 2025 10:38:49 -0700 Subject: [PATCH] Fix issue where cursor doesn't reappear when disabling the KWin plugin deactivate() wasn't getting triggered, add a deconstructor --- kwin/src/breezydesktopeffect.cpp | 35 ++++++++++++++++---------------- kwin/src/breezydesktopeffect.h | 4 ++-- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/kwin/src/breezydesktopeffect.cpp b/kwin/src/breezydesktopeffect.cpp index 8b5f91d..7ae4f49 100644 --- a/kwin/src/breezydesktopeffect.cpp +++ b/kwin/src/breezydesktopeffect.cpp @@ -92,14 +92,10 @@ namespace KWin { BreezyDesktopEffect::BreezyDesktopEffect() - : m_shutdownTimer(new QTimer(this)) { qCCritical(KWIN_XR) << "\t\t\tBreezy - constructor"; qmlRegisterUncreatableType("org.kde.kwin.effect.breezy_desktop", 1, 0, "BreezyDesktopEffect", QStringLiteral("BreezyDesktop cannot be created in QML")); - m_shutdownTimer->setSingleShot(true); - connect(m_shutdownTimer, &QTimer::timeout, this, &BreezyDesktopEffect::realDeactivate); - setupGlobalShortcut( BreezyShortcuts::TOGGLE, [this]() { this->toggle(); } @@ -165,6 +161,23 @@ BreezyDesktopEffect::BreezyDesktopEffect() } } +BreezyDesktopEffect::~BreezyDesktopEffect() +{ + qCCritical(KWIN_XR) << "\t\t\tBreezy - destructor"; + if (m_shmFileWatcher) { + if (!DataView::SHM_PATH.isEmpty()) { + m_shmFileWatcher->removePath(DataView::SHM_PATH); + } + m_shmFileWatcher->deleteLater(); + m_shmFileWatcher = nullptr; + } + if (m_shmDirectoryWatcher) { + m_shmDirectoryWatcher->deleteLater(); + m_shmDirectoryWatcher = nullptr; + } + deactivate(); +} + void BreezyDesktopEffect::setupGlobalShortcut(const BreezyShortcuts::Shortcut &shortcut, std::function triggeredFunc) { QAction *action = new QAction(this); action->setObjectName(shortcut.actionName); @@ -241,10 +254,6 @@ void BreezyDesktopEffect::activate() void BreezyDesktopEffect::deactivate() { - if (m_shutdownTimer->isActive()) { - return; - } - qCCritical(KWIN_XR) << "\t\t\tBreezy - deactivate"; disconnect(effects, &EffectsHandler::cursorShapeChanged, this, &BreezyDesktopEffect::updateCursorImage); m_cursorUpdateTimer->stop(); @@ -255,9 +264,7 @@ void BreezyDesktopEffect::deactivate() } m_virtualOutputs.clear(); - // this triggers realDeactivate with a delay so if it's triggered from QML it gives the QML function time to - // exit, avoiding a crash - m_shutdownTimer->start(250); + setRunning(false); } void BreezyDesktopEffect::enableDriver() @@ -270,12 +277,6 @@ void BreezyDesktopEffect::enableDriver() XRDriverIPC::instance().writeConfig(obj); } -void BreezyDesktopEffect::realDeactivate() -{ - qCCritical(KWIN_XR) << "\t\t\tBreezy - realDeactivate"; - setRunning(false); -} - void BreezyDesktopEffect::addVirtualDisplay(QSize size) { // QSize size(2560, 1440); diff --git a/kwin/src/breezydesktopeffect.h b/kwin/src/breezydesktopeffect.h index 9ef137e..cc8daa4 100644 --- a/kwin/src/breezydesktopeffect.h +++ b/kwin/src/breezydesktopeffect.h @@ -39,6 +39,7 @@ namespace KWin public: BreezyDesktopEffect(); + ~BreezyDesktopEffect() override; void reconfigure(ReconfigureFlags) override; @@ -101,13 +102,12 @@ namespace KWin QVariantMap initialProperties(Output *screen) override; private: - void realDeactivate(); + void teardown(); bool checkParityByte(const char* data); void setupGlobalShortcut(const BreezyShortcuts::Shortcut &shortcut, std::function triggeredFunc); void recenter(); - QTimer *m_shutdownTimer; QString m_cursorImageSource; QSize m_cursorImageSize;