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:
		
							
								
								
									
										2
									
								
								dependencies/external/mbedtls
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								dependencies/external/mbedtls
									
									
									
									
										vendored
									
									
								
							 Submodule dependencies/external/mbedtls updated: 1873d3bfc2...edb8fec988
									
								
							@@ -2,7 +2,7 @@
 | 
			
		||||
 | 
			
		||||
// parent class
 | 
			
		||||
#include <api/API.h>
 | 
			
		||||
#include <events/Event.h>
 | 
			
		||||
#include <events/EventEnum.h>
 | 
			
		||||
 | 
			
		||||
// hyperion includes
 | 
			
		||||
#include <utils/Components.h>
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@
 | 
			
		||||
#include <libcec/cec.h>
 | 
			
		||||
 | 
			
		||||
#include <utils/settings.h>
 | 
			
		||||
#include <events/Event.h>
 | 
			
		||||
#include <events/EventEnum.h>
 | 
			
		||||
 | 
			
		||||
using CECCallbacks         = CEC::ICECCallbacks;
 | 
			
		||||
using CECAdapter           = CEC::ICECAdapter;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
#ifndef EVENT_H
 | 
			
		||||
#define EVENT_H
 | 
			
		||||
#ifndef EVENTENUM_H
 | 
			
		||||
#define EVENTENUM_H
 | 
			
		||||
 | 
			
		||||
#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
 | 
			
		||||
 | 
			
		||||
#include <utils/settings.h>
 | 
			
		||||
#include <events/Event.h>
 | 
			
		||||
#include <events/EventEnum.h>
 | 
			
		||||
 | 
			
		||||
#include <QObject>
 | 
			
		||||
 | 
			
		||||
class Logger;
 | 
			
		||||
 | 
			
		||||
class EventHandler : public QObject {
 | 
			
		||||
class EventHandler : public QObject
 | 
			
		||||
{
 | 
			
		||||
	Q_OBJECT
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
	EventHandler();
 | 
			
		||||
	~EventHandler() override;
 | 
			
		||||
 | 
			
		||||
	static EventHandler* getInstance();
 | 
			
		||||
 | 
			
		||||
public slots:
 | 
			
		||||
 | 
			
		||||
	virtual void handleSettingsUpdate(settings::type type, const QJsonDocument& config);
 | 
			
		||||
 | 
			
		||||
	void suspend(bool sleep);
 | 
			
		||||
@@ -36,15 +35,12 @@ public slots:
 | 
			
		||||
	void handleEvent(Event event);
 | 
			
		||||
 | 
			
		||||
signals:
 | 
			
		||||
 | 
			
		||||
	void signalEvent(Event event);
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
 | 
			
		||||
	Logger * _log {};
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
 | 
			
		||||
	bool _isSuspended;
 | 
			
		||||
	bool _isIdle;
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
#include <QObject>
 | 
			
		||||
#include <QJsonDocument>
 | 
			
		||||
 | 
			
		||||
#include <events/Event.h>
 | 
			
		||||
#include <events/EventEnum.h>
 | 
			
		||||
 | 
			
		||||
#if defined(_WIN32)
 | 
			
		||||
#include <QAbstractNativeEventFilter>
 | 
			
		||||
@@ -16,7 +16,8 @@
 | 
			
		||||
 | 
			
		||||
class Logger;
 | 
			
		||||
 | 
			
		||||
class OsEventHandlerBase : public QObject {
 | 
			
		||||
class OsEventHandlerBase : public QObject
 | 
			
		||||
{
 | 
			
		||||
	Q_OBJECT
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
@@ -24,18 +25,15 @@ public:
 | 
			
		||||
	~OsEventHandlerBase() override;
 | 
			
		||||
 | 
			
		||||
public slots:
 | 
			
		||||
 | 
			
		||||
	void suspend(bool sleep);
 | 
			
		||||
	void lock(bool isLocked);
 | 
			
		||||
 | 
			
		||||
	virtual void handleSettingsUpdate(settings::type type, const QJsonDocument& config);
 | 
			
		||||
 | 
			
		||||
signals:
 | 
			
		||||
 | 
			
		||||
	void signalEvent(Event event);
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
 | 
			
		||||
	virtual bool registerOsEventHandler() { return true; }
 | 
			
		||||
	virtual void unregisterOsEventHandler() {}
 | 
			
		||||
	virtual bool registerLockHandler() { return true; }
 | 
			
		||||
@@ -49,14 +47,12 @@ protected:
 | 
			
		||||
	bool _isLockRegistered;
 | 
			
		||||
 | 
			
		||||
	Logger * _log {};
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#if defined(_WIN32)
 | 
			
		||||
 | 
			
		||||
class OsEventHandlerWindows : public OsEventHandlerBase, public QAbstractNativeEventFilter {
 | 
			
		||||
class OsEventHandlerWindows : public OsEventHandlerBase, public QAbstractNativeEventFilter
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
	OsEventHandlerWindows();
 | 
			
		||||
@@ -70,7 +66,6 @@ protected:
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
 | 
			
		||||
	bool registerOsEventHandler() override;
 | 
			
		||||
	void unregisterOsEventHandler() override;
 | 
			
		||||
	bool registerLockHandler() override;
 | 
			
		||||
@@ -83,7 +78,8 @@ private:
 | 
			
		||||
using OsEventHandler = OsEventHandlerWindows;
 | 
			
		||||
 | 
			
		||||
#elif defined(__linux__)
 | 
			
		||||
class OsEventHandlerLinux : public OsEventHandlerBase {
 | 
			
		||||
class OsEventHandlerLinux : public OsEventHandlerBase
 | 
			
		||||
{
 | 
			
		||||
	Q_OBJECT
 | 
			
		||||
 | 
			
		||||
	static void static_signaleHandler(int signum)
 | 
			
		||||
@@ -109,6 +105,33 @@ private:
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
using OsEventHandler = OsEventHandlerBase;
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,7 @@
 | 
			
		||||
// Determine the cmake options
 | 
			
		||||
#include <HyperionConfig.h>
 | 
			
		||||
 | 
			
		||||
#include <events/Event.h>
 | 
			
		||||
#include <events/EventEnum.h>
 | 
			
		||||
 | 
			
		||||
///
 | 
			
		||||
/// Capture class for V4L2 devices
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@
 | 
			
		||||
#include <utils/Logger.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)
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,7 @@
 | 
			
		||||
 | 
			
		||||
#include <grabber/GrabberType.h>
 | 
			
		||||
 | 
			
		||||
#include <events/Event.h>
 | 
			
		||||
#include <events/EventEnum.h>
 | 
			
		||||
 | 
			
		||||
class Grabber;
 | 
			
		||||
class GlobalSignals;
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
#include <utils/VideoMode.h>
 | 
			
		||||
#include <utils/settings.h>
 | 
			
		||||
#include <utils/Components.h>
 | 
			
		||||
#include <events/Event.h>
 | 
			
		||||
#include <events/EventEnum.h>
 | 
			
		||||
 | 
			
		||||
// qt
 | 
			
		||||
#include <QMap>
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,7 @@
 | 
			
		||||
#include <grabber/QtGrabber.h>
 | 
			
		||||
 | 
			
		||||
#include <utils/WeakConnect.h>
 | 
			
		||||
#include <events/Event.h>
 | 
			
		||||
#include <events/EventEnum.h>
 | 
			
		||||
 | 
			
		||||
#if defined(ENABLE_MF)
 | 
			
		||||
	#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)
 | 
			
		||||
 | 
			
		||||
add_library(events
 | 
			
		||||
	${CURRENT_HEADER_DIR}/Event.h
 | 
			
		||||
	${CURRENT_HEADER_DIR}/EventEnum.h
 | 
			
		||||
	${CURRENT_HEADER_DIR}/EventHandler.h
 | 
			
		||||
	${CURRENT_SOURCE_DIR}/EventHandler.cpp
 | 
			
		||||
	${CURRENT_HEADER_DIR}/OsEventHandler.h
 | 
			
		||||
 
 | 
			
		||||
@@ -3,8 +3,6 @@
 | 
			
		||||
#include <QJsonDocument>
 | 
			
		||||
#include <QJsonObject>
 | 
			
		||||
 | 
			
		||||
#include <events/Event.h>
 | 
			
		||||
 | 
			
		||||
#include <utils/Logger.h>
 | 
			
		||||
#include <utils/Process.h>
 | 
			
		||||
#include <hyperion/HyperionIManager.h>
 | 
			
		||||
 
 | 
			
		||||
@@ -445,4 +445,61 @@ void OsEventHandlerLinux::unregisterLockHandler()
 | 
			
		||||
}
 | 
			
		||||
#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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user