diff --git a/src/app/screensaver.cpp b/src/app/screensaver.cpp index 540c8901327407037494008f67b908747b33fc8c..379dfe1c57a83f01fec81f4ef7aea7e2294f8396 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 62cfe504b2e4d1407424fffdbce054c5e357b799..44303a160b3cfe577608457aa566c1d5073be7f1 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 };