Fix issue where cursor doesn't reappear when disabling the KWin plugin

deactivate() wasn't getting triggered, add a deconstructor
This commit is contained in:
wheaney 2025-09-08 10:38:49 -07:00
parent 229ee9749a
commit 8967c00666
2 changed files with 20 additions and 19 deletions

View File

@ -92,14 +92,10 @@ namespace KWin
{
BreezyDesktopEffect::BreezyDesktopEffect()
: m_shutdownTimer(new QTimer(this))
{
qCCritical(KWIN_XR) << "\t\t\tBreezy - constructor";
qmlRegisterUncreatableType<BreezyDesktopEffect>("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<void()> 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);

View File

@ -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<void()> triggeredFunc);
void recenter();
QTimer *m_shutdownTimer;
QString m_cursorImageSource;
QSize m_cursorImageSize;