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