mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2025-03-01 10:33:28 +00:00
MacOS lock/unlock added
This commit is contained in:
parent
114282ff70
commit
a238ebffc0
2
dependencies/external/mbedtls
vendored
2
dependencies/external/mbedtls
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 1873d3bfc2da771672bd8e7e8f41f57e0af77f33
|
Subproject commit edb8fec9882084344a314368ac7fd957a187519c
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
// parent class
|
// parent class
|
||||||
#include <api/API.h>
|
#include <api/API.h>
|
||||||
#include <events/Event.h>
|
#include <events/EventEnum.h>
|
||||||
|
|
||||||
// hyperion includes
|
// hyperion includes
|
||||||
#include <utils/Components.h>
|
#include <utils/Components.h>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
#include <libcec/cec.h>
|
#include <libcec/cec.h>
|
||||||
|
|
||||||
#include <utils/settings.h>
|
#include <utils/settings.h>
|
||||||
#include <events/Event.h>
|
#include <events/EventEnum.h>
|
||||||
|
|
||||||
using CECCallbacks = CEC::ICECCallbacks;
|
using CECCallbacks = CEC::ICECCallbacks;
|
||||||
using CECAdapter = CEC::ICECAdapter;
|
using CECAdapter = CEC::ICECAdapter;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#ifndef EVENT_H
|
#ifndef EVENTENUM_H
|
||||||
#define EVENT_H
|
#define EVENTENUM_H
|
||||||
|
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
|
||||||
@ -47,4 +47,4 @@ inline Event stringToEvent(const QString& event)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif // EVENT_H
|
#endif // EVENTENUM_H
|
@ -2,24 +2,23 @@
|
|||||||
#define EVENTHANDLER_H
|
#define EVENTHANDLER_H
|
||||||
|
|
||||||
#include <utils/settings.h>
|
#include <utils/settings.h>
|
||||||
#include <events/Event.h>
|
#include <events/EventEnum.h>
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
|
||||||
class Logger;
|
class Logger;
|
||||||
|
|
||||||
class EventHandler : public QObject {
|
class EventHandler : public QObject
|
||||||
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
EventHandler();
|
EventHandler();
|
||||||
~EventHandler() override;
|
~EventHandler() override;
|
||||||
|
|
||||||
static EventHandler* getInstance();
|
static EventHandler* getInstance();
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
|
||||||
virtual void handleSettingsUpdate(settings::type type, const QJsonDocument& config);
|
virtual void handleSettingsUpdate(settings::type type, const QJsonDocument& config);
|
||||||
|
|
||||||
void suspend(bool sleep);
|
void suspend(bool sleep);
|
||||||
@ -36,15 +35,12 @@ public slots:
|
|||||||
void handleEvent(Event event);
|
void handleEvent(Event event);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
|
||||||
void signalEvent(Event event);
|
void signalEvent(Event event);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
Logger * _log {};
|
Logger * _log {};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
bool _isSuspended;
|
bool _isSuspended;
|
||||||
bool _isIdle;
|
bool _isIdle;
|
||||||
};
|
};
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QJsonDocument>
|
#include <QJsonDocument>
|
||||||
|
|
||||||
#include <events/Event.h>
|
#include <events/EventEnum.h>
|
||||||
|
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
#include <QAbstractNativeEventFilter>
|
#include <QAbstractNativeEventFilter>
|
||||||
@ -16,7 +16,8 @@
|
|||||||
|
|
||||||
class Logger;
|
class Logger;
|
||||||
|
|
||||||
class OsEventHandlerBase : public QObject {
|
class OsEventHandlerBase : public QObject
|
||||||
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -24,18 +25,15 @@ public:
|
|||||||
~OsEventHandlerBase() override;
|
~OsEventHandlerBase() override;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
|
||||||
void suspend(bool sleep);
|
void suspend(bool sleep);
|
||||||
void lock(bool isLocked);
|
void lock(bool isLocked);
|
||||||
|
|
||||||
virtual void handleSettingsUpdate(settings::type type, const QJsonDocument& config);
|
virtual void handleSettingsUpdate(settings::type type, const QJsonDocument& config);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
|
||||||
void signalEvent(Event event);
|
void signalEvent(Event event);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
virtual bool registerOsEventHandler() { return true; }
|
virtual bool registerOsEventHandler() { return true; }
|
||||||
virtual void unregisterOsEventHandler() {}
|
virtual void unregisterOsEventHandler() {}
|
||||||
virtual bool registerLockHandler() { return true; }
|
virtual bool registerLockHandler() { return true; }
|
||||||
@ -49,14 +47,12 @@ protected:
|
|||||||
bool _isLockRegistered;
|
bool _isLockRegistered;
|
||||||
|
|
||||||
Logger * _log {};
|
Logger * _log {};
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
|
|
||||||
class OsEventHandlerWindows : public OsEventHandlerBase, public QAbstractNativeEventFilter {
|
class OsEventHandlerWindows : public OsEventHandlerBase, public QAbstractNativeEventFilter
|
||||||
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
OsEventHandlerWindows();
|
OsEventHandlerWindows();
|
||||||
@ -70,7 +66,6 @@ protected:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
bool registerOsEventHandler() override;
|
bool registerOsEventHandler() override;
|
||||||
void unregisterOsEventHandler() override;
|
void unregisterOsEventHandler() override;
|
||||||
bool registerLockHandler() override;
|
bool registerLockHandler() override;
|
||||||
@ -83,7 +78,8 @@ private:
|
|||||||
using OsEventHandler = OsEventHandlerWindows;
|
using OsEventHandler = OsEventHandlerWindows;
|
||||||
|
|
||||||
#elif defined(__linux__)
|
#elif defined(__linux__)
|
||||||
class OsEventHandlerLinux : public OsEventHandlerBase {
|
class OsEventHandlerLinux : public OsEventHandlerBase
|
||||||
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
static void static_signaleHandler(int signum)
|
static void static_signaleHandler(int signum)
|
||||||
@ -109,6 +105,33 @@ private:
|
|||||||
|
|
||||||
using OsEventHandler = OsEventHandlerLinux;
|
using OsEventHandler = OsEventHandlerLinux;
|
||||||
|
|
||||||
|
#elif defined(__APPLE__)
|
||||||
|
#include <CoreFoundation/CoreFoundation.h>
|
||||||
|
|
||||||
|
class OsEventHandlerMacOS : public OsEventHandlerBase
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
static void notificationCenterCallBack(CFNotificationCenterRef center, void* observer, CFStringRef name, const void* object, CFDictionaryRef userInfo)
|
||||||
|
{
|
||||||
|
OsEventHandlerMacOS::getInstance()->handleSignal(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
void handleSignal (CFStringRef lock_unlock);
|
||||||
|
|
||||||
|
private:
|
||||||
|
static OsEventHandlerMacOS* getInstance();
|
||||||
|
|
||||||
|
CFStringRef lockSignal = CFSTR("com.apple.screenIsLocked");
|
||||||
|
CFStringRef unlockSignal = CFSTR("com.apple.screenIsUnlocked");
|
||||||
|
bool registerLockHandler() override;
|
||||||
|
void unregisterLockHandler() override;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
using OsEventHandler = OsEventHandlerMacOS;
|
||||||
|
|
||||||
#else
|
#else
|
||||||
using OsEventHandler = OsEventHandlerBase;
|
using OsEventHandler = OsEventHandlerBase;
|
||||||
#endif
|
#endif
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
// Determine the cmake options
|
// Determine the cmake options
|
||||||
#include <HyperionConfig.h>
|
#include <HyperionConfig.h>
|
||||||
|
|
||||||
#include <events/Event.h>
|
#include <events/EventEnum.h>
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Capture class for V4L2 devices
|
/// Capture class for V4L2 devices
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
#include <utils/Logger.h>
|
#include <utils/Logger.h>
|
||||||
#include <utils/Components.h>
|
#include <utils/Components.h>
|
||||||
|
|
||||||
#include <events/Event.h>
|
#include <events/EventEnum.h>
|
||||||
|
|
||||||
///
|
///
|
||||||
/// @brief The Grabber class is responsible to apply image resizes (with or without ImageResampler)
|
/// @brief The Grabber class is responsible to apply image resizes (with or without ImageResampler)
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
#include <grabber/GrabberType.h>
|
#include <grabber/GrabberType.h>
|
||||||
|
|
||||||
#include <events/Event.h>
|
#include <events/EventEnum.h>
|
||||||
|
|
||||||
class Grabber;
|
class Grabber;
|
||||||
class GlobalSignals;
|
class GlobalSignals;
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
#include <utils/VideoMode.h>
|
#include <utils/VideoMode.h>
|
||||||
#include <utils/settings.h>
|
#include <utils/settings.h>
|
||||||
#include <utils/Components.h>
|
#include <utils/Components.h>
|
||||||
#include <events/Event.h>
|
#include <events/EventEnum.h>
|
||||||
|
|
||||||
// qt
|
// qt
|
||||||
#include <QMap>
|
#include <QMap>
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
#include <grabber/QtGrabber.h>
|
#include <grabber/QtGrabber.h>
|
||||||
|
|
||||||
#include <utils/WeakConnect.h>
|
#include <utils/WeakConnect.h>
|
||||||
#include <events/Event.h>
|
#include <events/EventEnum.h>
|
||||||
|
|
||||||
#if defined(ENABLE_MF)
|
#if defined(ENABLE_MF)
|
||||||
#include <grabber/MFGrabber.h>
|
#include <grabber/MFGrabber.h>
|
||||||
|
@ -3,7 +3,7 @@ SET(CURRENT_HEADER_DIR ${CMAKE_SOURCE_DIR}/include/events)
|
|||||||
SET(CURRENT_SOURCE_DIR ${CMAKE_SOURCE_DIR}/libsrc/events)
|
SET(CURRENT_SOURCE_DIR ${CMAKE_SOURCE_DIR}/libsrc/events)
|
||||||
|
|
||||||
add_library(events
|
add_library(events
|
||||||
${CURRENT_HEADER_DIR}/Event.h
|
${CURRENT_HEADER_DIR}/EventEnum.h
|
||||||
${CURRENT_HEADER_DIR}/EventHandler.h
|
${CURRENT_HEADER_DIR}/EventHandler.h
|
||||||
${CURRENT_SOURCE_DIR}/EventHandler.cpp
|
${CURRENT_SOURCE_DIR}/EventHandler.cpp
|
||||||
${CURRENT_HEADER_DIR}/OsEventHandler.h
|
${CURRENT_HEADER_DIR}/OsEventHandler.h
|
||||||
|
@ -3,8 +3,6 @@
|
|||||||
#include <QJsonDocument>
|
#include <QJsonDocument>
|
||||||
#include <QJsonObject>
|
#include <QJsonObject>
|
||||||
|
|
||||||
#include <events/Event.h>
|
|
||||||
|
|
||||||
#include <utils/Logger.h>
|
#include <utils/Logger.h>
|
||||||
#include <utils/Process.h>
|
#include <utils/Process.h>
|
||||||
#include <hyperion/HyperionIManager.h>
|
#include <hyperion/HyperionIManager.h>
|
||||||
|
@ -445,4 +445,61 @@ void OsEventHandlerLinux::unregisterLockHandler()
|
|||||||
}
|
}
|
||||||
#endif // HYPERION_HAS_DBUS
|
#endif // HYPERION_HAS_DBUS
|
||||||
|
|
||||||
#endif // __linux__
|
#elif defined(__APPLE__)
|
||||||
|
|
||||||
|
OsEventHandlerMacOS* OsEventHandlerMacOS::getInstance()
|
||||||
|
{
|
||||||
|
static OsEventHandlerMacOS instance;
|
||||||
|
return &instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
void OsEventHandlerMacOS::handleSignal (CFStringRef lock_unlock)
|
||||||
|
{
|
||||||
|
if (CFEqual(lock_unlock, CFSTR("com.apple.screenIsLocked")))
|
||||||
|
{
|
||||||
|
lock(true);
|
||||||
|
}
|
||||||
|
else if (CFEqual(lock_unlock, CFSTR("com.apple.screenIsUnlocked")))
|
||||||
|
{
|
||||||
|
lock(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool OsEventHandlerMacOS::registerLockHandler()
|
||||||
|
{
|
||||||
|
bool isRegistered{ _isLockRegistered };
|
||||||
|
if (!_isLockRegistered)
|
||||||
|
{
|
||||||
|
CFNotificationCenterRef distCenter;
|
||||||
|
|
||||||
|
distCenter = CFNotificationCenterGetDistributedCenter();
|
||||||
|
if (distCenter != nullptr)
|
||||||
|
{
|
||||||
|
CFNotificationCenterAddObserver(distCenter, this, &OsEventHandlerMacOS::notificationCenterCallBack, lockSignal, nullptr, CFNotificationSuspensionBehaviorDeliverImmediately);
|
||||||
|
CFNotificationCenterAddObserver(distCenter, this, &OsEventHandlerMacOS::notificationCenterCallBack, unlockSignal, nullptr, CFNotificationSuspensionBehaviorDeliverImmediately);
|
||||||
|
isRegistered = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Error(_log, "Could not register for lock/unlock events!");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isRegistered)
|
||||||
|
{
|
||||||
|
_isLockRegistered = true;
|
||||||
|
}
|
||||||
|
return isRegistered;
|
||||||
|
}
|
||||||
|
|
||||||
|
void OsEventHandlerMacOS::unregisterLockHandler()
|
||||||
|
{
|
||||||
|
if (_isLockRegistered)
|
||||||
|
{
|
||||||
|
CFNotificationCenterRemoveEveryObserver(CFNotificationCenterGetDistributedCenter(), this);
|
||||||
|
_isLockRegistered = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user