From 6aaac127589922527dde83e031dbe9f52e8eb779 Mon Sep 17 00:00:00 2001 From: Kateryna Kostiuk Date: Thu, 11 Jan 2024 12:08:19 -0500 Subject: [PATCH] system: implement screen saver on macOS GitLab: #1513 Change-Id: I7f8e6a8f19ddd932d62a0523e8f95b29851567b2 --- src/app/screensaver.cpp | 24 +++++++++++++++++++++++- src/app/screensaver.h | 21 +++++++++++++++------ 2 files changed, 38 insertions(+), 7 deletions(-) diff --git a/src/app/screensaver.cpp b/src/app/screensaver.cpp index 540c8901..379dfe1c 100644 --- a/src/app/screensaver.cpp +++ b/src/app/screensaver.cpp @@ -31,7 +31,8 @@ ScreenSaver::ScreenSaver(QObject* parent) } #else : QObject(parent) -{} +{ +} #endif #ifdef Q_OS_LINUX @@ -83,6 +84,18 @@ ScreenSaver::inhibit(void) qDebug() << "Error inhibiting screen saver: " << error.message() << error.name(); } #endif + +#ifdef Q_OS_MACOS + CFStringRef reasonForActivity = CFStringCreateWithCString(NULL, + "Active Call: Keeping Screen Awake", + kCFStringEncodingUTF8); + IOReturn success = IOPMAssertionCreateWithName(kIOPMAssertionTypePreventUserIdleDisplaySleep, + kIOPMAssertionLevelOn, + reasonForActivity, + &preventSleepAssertionID); + CFRelease(reasonForActivity); + return true; +#endif return false; } @@ -111,6 +124,12 @@ ScreenSaver::uninhibit(void) } request_ = 0u; #endif +#ifdef Q_OS_MACOS + IOReturn releaseResult = IOPMAssertionRelease(preventSleepAssertionID); + preventSleepAssertionID = 0; + return true; +#endif + return false; } @@ -119,6 +138,9 @@ ScreenSaver::isInhibited(void) { #ifdef Q_OS_LINUX return request_ != 0u; +#endif +#ifdef Q_OS_MACOS + return preventSleepAssertionID != 0; #endif return false; } diff --git a/src/app/screensaver.h b/src/app/screensaver.h index 62cfe504..44303a16 100644 --- a/src/app/screensaver.h +++ b/src/app/screensaver.h @@ -26,6 +26,10 @@ #define N_SERVICES 3 #endif +#ifdef Q_OS_MACOS +#include "IOKit/pwr_mgt/IOPMLib.h" +#endif + class ScreenSaver : public QObject { Q_OBJECT @@ -40,16 +44,21 @@ public: #ifdef Q_OS_LINUX private: bool createInterface(void); - QString services_[N_SERVICES] = { "org.freedesktop.ScreenSaver", - "org.gnome.ScreenSaver", - "org.mate.ScreenSaver" }; + QString services_[N_SERVICES] = {"org.freedesktop.ScreenSaver", + "org.gnome.ScreenSaver", + "org.mate.ScreenSaver"}; - QString paths_[N_SERVICES] = { "/org/freedesktop/ScreenSaver", - "/org/gnome/ScreenSaver", - "/org/mate/ScreenSaver" }; + QString paths_[N_SERVICES] = {"/org/freedesktop/ScreenSaver", + "/org/gnome/ScreenSaver", + "/org/mate/ScreenSaver"}; uint request_; QDBusConnection sessionBus_; QDBusInterface* screenSaverInterface_; #endif + +#ifdef Q_OS_MACOS +private: + IOPMAssertionID preventSleepAssertionID {0}; +#endif };