diff --git a/src/hyperiond/SuspendHandler.cpp b/src/hyperiond/SuspendHandler.cpp index 36e6f35e..d6a437e1 100644 --- a/src/hyperiond/SuspendHandler.cpp +++ b/src/hyperiond/SuspendHandler.cpp @@ -5,14 +5,28 @@ #include #include +#include #include +#if defined(_WIN32) +#include +#include +#include +#include + +#pragma comment( lib, "wtsapi32.lib" ) +#endif + SuspendHandlerBase::SuspendHandlerBase() : _isSuspendEnabled(false) , _isLockEnabled(false) + , _isSuspendApiEnabled(false) + , _isIdleApiEnabled(false) , _isSuspendOnLock(false) , _isSuspendRegistered(false) , _isLockRegistered(false) + , _isSuspendApiRegistered(false) + , _isIdleApiRegistered(false) , _isSuspended(false) , _isIdle(false) , _isLocked (false) @@ -90,11 +104,10 @@ void SuspendHandlerBase::handleSettingsUpdate(settings::type type, const QJsonDo bool SuspendHandlerBase::registerSuspendHandler() { - Debug(_log, "_isSuspendRegistered: %d", _isSuspendRegistered); if (!_isSuspendRegistered) { - connect(this, &SuspendHandlerBase::suspendEvent, HyperionIManager::getInstance(), &HyperionIManager::suspend); - connect(this, &SuspendHandlerBase::resumeEvent, HyperionIManager::getInstance(), &HyperionIManager::resume); + QObject::connect(this, &SuspendHandlerBase::suspendEvent, HyperionIManager::getInstance(), &HyperionIManager::suspend); + QObject::connect(this, &SuspendHandlerBase::resumeEvent, HyperionIManager::getInstance(), &HyperionIManager::resume); Info(_log, "Registered for suspend/resume events."); _isSuspendRegistered = true; } @@ -105,8 +118,8 @@ void SuspendHandlerBase::unregisterSuspendHandler() { if (_isSuspendRegistered) { - disconnect(this, &SuspendHandlerBase::suspendEvent, HyperionIManager::getInstance(), &HyperionIManager::suspend); - disconnect(this, &SuspendHandlerBase::resumeEvent, HyperionIManager::getInstance(), &HyperionIManager::resume); + QObject::disconnect(this, &SuspendHandlerBase::suspendEvent, HyperionIManager::getInstance(), &HyperionIManager::suspend); + QObject::disconnect(this, &SuspendHandlerBase::resumeEvent, HyperionIManager::getInstance(), &HyperionIManager::resume); Info(_log, "Unregistered for suspend/resume events."); _isSuspendRegistered = false; } @@ -114,16 +127,16 @@ void SuspendHandlerBase::unregisterSuspendHandler() bool SuspendHandlerBase::registerLockHandler() { - disconnect(this, &SuspendHandlerBase::lockedEvent,nullptr, nullptr); + QObject::disconnect(this, &SuspendHandlerBase::lockedEvent,nullptr, nullptr); if (_isSuspendOnLock) { - connect(this, &SuspendHandlerBase::lockedEvent, HyperionIManager::getInstance(), &HyperionIManager::toggleSuspend); + QObject::connect(this, &SuspendHandlerBase::lockedEvent, HyperionIManager::getInstance(), &HyperionIManager::toggleSuspend); } else { - connect(this, &SuspendHandlerBase::lockedEvent, HyperionIManager::getInstance(), &HyperionIManager::toggleIdle); + QObject::connect(this, &SuspendHandlerBase::lockedEvent, HyperionIManager::getInstance(), &HyperionIManager::toggleIdle); } - connect(this, &SuspendHandlerBase::idleEvent, HyperionIManager::getInstance(), &HyperionIManager::toggleIdle); + QObject::connect(this, &SuspendHandlerBase::idleEvent, HyperionIManager::getInstance(), &HyperionIManager::toggleIdle); Info(_log, "Registered for lock/unlock events. %s on lock event.", _isSuspendOnLock ? "Suspend" : "Idle"); _isLockRegistered = true; return true; @@ -133,9 +146,9 @@ void SuspendHandlerBase::unregisterLockHandler() { if (_isLockRegistered) { - disconnect(this, &SuspendHandlerBase::lockedEvent, HyperionIManager::getInstance(), &HyperionIManager::toggleSuspend); - disconnect(this, &SuspendHandlerBase::lockedEvent, HyperionIManager::getInstance(), &HyperionIManager::toggleIdle); - disconnect(this, &SuspendHandlerBase::idleEvent, HyperionIManager::getInstance(), &HyperionIManager::toggleIdle); + QObject::disconnect(this, &SuspendHandlerBase::lockedEvent, HyperionIManager::getInstance(), &HyperionIManager::toggleSuspend); + QObject::disconnect(this, &SuspendHandlerBase::lockedEvent, HyperionIManager::getInstance(), &HyperionIManager::toggleIdle); + QObject::disconnect(this, &SuspendHandlerBase::idleEvent, HyperionIManager::getInstance(), &HyperionIManager::toggleIdle); Info(_log, "Unregistered for lock/unlock events."); _isLockRegistered = false; } @@ -146,8 +159,8 @@ bool SuspendHandlerBase::registerSuspendApiHandler() { if (!_isSuspendApiRegistered) { - connect(HyperionIManager::getInstance(), &HyperionIManager::triggerSuspend, this, QOverload::of(&SuspendHandler::suspend)); - connect(HyperionIManager::getInstance(), &HyperionIManager::triggerToggleSuspend, this, &SuspendHandler::toggleSuspend); + QObject::connect(HyperionIManager::getInstance(), &HyperionIManager::triggerSuspend, this, QOverload::of(&SuspendHandler::suspend)); + QObject::connect(HyperionIManager::getInstance(), &HyperionIManager::triggerToggleSuspend, this, &SuspendHandler::toggleSuspend); Info(_log, "Registered for suspend/resume API events."); _isSuspendApiRegistered = true; } @@ -158,8 +171,8 @@ void SuspendHandlerBase::unregisterSuspendApiHandler() { if (_isSuspendApiRegistered) { - disconnect(HyperionIManager::getInstance(), &HyperionIManager::triggerSuspend, this, QOverload::of(&SuspendHandler::suspend)); - disconnect(HyperionIManager::getInstance(), &HyperionIManager::triggerToggleSuspend, this, &SuspendHandler::toggleSuspend); + QObject::disconnect(HyperionIManager::getInstance(), &HyperionIManager::triggerSuspend, this, QOverload::of(&SuspendHandler::suspend)); + QObject::disconnect(HyperionIManager::getInstance(), &HyperionIManager::triggerToggleSuspend, this, &SuspendHandler::toggleSuspend); Info(_log, "Unregistered for suspend/resume API events."); _isSuspendApiRegistered = false; } @@ -169,8 +182,8 @@ bool SuspendHandlerBase::registerIdleApiHandler() { if (!_isIdleApiRegistered) { - connect(HyperionIManager::getInstance(), &HyperionIManager::triggerIdle, this, &SuspendHandler::idle); - connect(HyperionIManager::getInstance(), &HyperionIManager::triggerToggleIdle, this, &SuspendHandler::toggleIdle); + QObject::connect(HyperionIManager::getInstance(), &HyperionIManager::triggerIdle, this, &SuspendHandler::idle); + QObject::connect(HyperionIManager::getInstance(), &HyperionIManager::triggerToggleIdle, this, &SuspendHandler::toggleIdle); Info(_log, "Registered for idle API events."); _isIdleApiRegistered = true; } @@ -181,8 +194,8 @@ void SuspendHandlerBase::unregisterIdleApiHandler() { if (_isIdleApiRegistered) { - disconnect(HyperionIManager::getInstance(), &HyperionIManager::triggerIdle, this, &SuspendHandler::idle); - disconnect(HyperionIManager::getInstance(), &HyperionIManager::triggerToggleIdle, this, &SuspendHandler::toggleIdle); + QObject::disconnect(HyperionIManager::getInstance(), &HyperionIManager::triggerIdle, this, &SuspendHandler::idle); + QObject::disconnect(HyperionIManager::getInstance(), &HyperionIManager::triggerToggleIdle, this, &SuspendHandler::toggleIdle); Info(_log, "Unregistered for idle API events."); _isIdleApiRegistered = false; } @@ -314,14 +327,9 @@ void SuspendHandlerBase::lock(bool isLocked) } #if defined(_WIN32) -#include -#include -#include -#include - -#pragma comment( lib, "wtsapi32.lib" ) SuspendHandlerWindows::SuspendHandlerWindows() + : _notifyHandle(NULL) { } @@ -374,7 +382,7 @@ bool SuspendHandlerWindows::nativeEventFilter(const QByteArray& eventType, void* bool SuspendHandlerWindows::registerSuspendHandler() { - bool isRegistered {false}; + bool isRegistered{ _isSuspendRegistered }; if (!_isSuspendRegistered) { auto handle = reinterpret_cast (_widget.winId()); @@ -382,12 +390,16 @@ bool SuspendHandlerWindows::registerSuspendHandler() if (_notifyHandle != NULL) { QCoreApplication::instance()->installNativeEventFilter(this); - isRegistered = SuspendHandlerBase::registerSuspendHandler(); } else { Error(_log, "Could not register for suspend/resume events!"); } + + if (isRegistered) + { + isRegistered = SuspendHandlerBase::registerSuspendHandler(); + } } return isRegistered; } @@ -408,18 +420,25 @@ void SuspendHandlerWindows::unregisterSuspendHandler() bool SuspendHandlerWindows::registerLockHandler() { - bool isRegistered {false}; + bool isRegistered{ _isLockRegistered }; if (!_isLockRegistered) { auto handle = reinterpret_cast (_widget.winId()); if (WTSRegisterSessionNotification(handle, NOTIFY_FOR_THIS_SESSION)) { - isRegistered = SuspendHandlerBase::registerLockHandler(); + isRegistered = true; } else { Error(_log, "Could not register for lock/unlock events!"); } + + + } + + if (isRegistered) + { + isRegistered = SuspendHandlerBase::registerLockHandler(); } return isRegistered; } diff --git a/src/hyperiond/SuspendHandler.h b/src/hyperiond/SuspendHandler.h index fd3051e2..ff8260e8 100644 --- a/src/hyperiond/SuspendHandler.h +++ b/src/hyperiond/SuspendHandler.h @@ -3,6 +3,13 @@ #include #include +#if defined(_WIN32) +#include +#include +#include +#include +#endif + #include class Logger; @@ -12,7 +19,7 @@ class SuspendHandlerBase : public QObject { public: SuspendHandlerBase(); - virtual ~SuspendHandlerBase() override; + ~SuspendHandlerBase() override; public slots: @@ -69,10 +76,6 @@ private: }; #if defined(_WIN32) -#include -#include -#include -#include class SuspendHandlerWindows : public SuspendHandlerBase, public QAbstractNativeEventFilter { @@ -90,8 +93,8 @@ protected: private: bool registerSuspendHandler() override; - bool unregisterSuspendHandler() override; - void registerLockHandler() override; + void unregisterSuspendHandler() override; + bool registerLockHandler() override; void unregisterLockHandler() override; QWidget _widget;