mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2025-03-01 10:33:28 +00:00
Fix Windows
This commit is contained in:
parent
7d3f13c7b5
commit
b1c8534cb7
@ -5,14 +5,28 @@
|
||||
#include <QJsonObject>
|
||||
|
||||
#include <hyperion/HyperionIManager.h>
|
||||
#include <utils/Logger.h>
|
||||
#include <iostream>
|
||||
|
||||
#if defined(_WIN32)
|
||||
#include <QCoreApplication>
|
||||
#include <QWidget>
|
||||
#include <windows.h>
|
||||
#include <wtsapi32.h>
|
||||
|
||||
#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<bool>::of(&SuspendHandler::suspend));
|
||||
connect(HyperionIManager::getInstance(), &HyperionIManager::triggerToggleSuspend, this, &SuspendHandler::toggleSuspend);
|
||||
QObject::connect(HyperionIManager::getInstance(), &HyperionIManager::triggerSuspend, this, QOverload<bool>::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<bool>::of(&SuspendHandler::suspend));
|
||||
disconnect(HyperionIManager::getInstance(), &HyperionIManager::triggerToggleSuspend, this, &SuspendHandler::toggleSuspend);
|
||||
QObject::disconnect(HyperionIManager::getInstance(), &HyperionIManager::triggerSuspend, this, QOverload<bool>::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 <QCoreApplication>
|
||||
#include <QWidget>
|
||||
#include <windows.h>
|
||||
#include <wtsapi32.h>
|
||||
|
||||
#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<HWND> (_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<HWND> (_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;
|
||||
}
|
||||
|
@ -3,6 +3,13 @@
|
||||
#include <QObject>
|
||||
#include <QJsonDocument>
|
||||
|
||||
#if defined(_WIN32)
|
||||
#include <QAbstractNativeEventFilter>
|
||||
#include <QAbstractEventDispatcher>
|
||||
#include <QWidget>
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
#include <utils/settings.h>
|
||||
|
||||
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 <QAbstractNativeEventFilter>
|
||||
#include <QAbstractEventDispatcher>
|
||||
#include <QWidget>
|
||||
#include <windows.h>
|
||||
|
||||
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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user