Skip to content
Snippets Groups Projects
Commit 6aaac127 authored by Kateryna Kostiuk's avatar Kateryna Kostiuk Committed by Sébastien Blin
Browse files

system: implement screen saver on macOS

GitLab: #1513
Change-Id: I7f8e6a8f19ddd932d62a0523e8f95b29851567b2
parent a0fc85d0
No related branches found
No related tags found
No related merge requests found
...@@ -31,7 +31,8 @@ ScreenSaver::ScreenSaver(QObject* parent) ...@@ -31,7 +31,8 @@ ScreenSaver::ScreenSaver(QObject* parent)
} }
#else #else
: QObject(parent) : QObject(parent)
{} {
}
#endif #endif
#ifdef Q_OS_LINUX #ifdef Q_OS_LINUX
...@@ -83,6 +84,18 @@ ScreenSaver::inhibit(void) ...@@ -83,6 +84,18 @@ ScreenSaver::inhibit(void)
qDebug() << "Error inhibiting screen saver: " << error.message() << error.name(); qDebug() << "Error inhibiting screen saver: " << error.message() << error.name();
} }
#endif #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; return false;
} }
...@@ -111,6 +124,12 @@ ScreenSaver::uninhibit(void) ...@@ -111,6 +124,12 @@ ScreenSaver::uninhibit(void)
} }
request_ = 0u; request_ = 0u;
#endif #endif
#ifdef Q_OS_MACOS
IOReturn releaseResult = IOPMAssertionRelease(preventSleepAssertionID);
preventSleepAssertionID = 0;
return true;
#endif
return false; return false;
} }
...@@ -119,6 +138,9 @@ ScreenSaver::isInhibited(void) ...@@ -119,6 +138,9 @@ ScreenSaver::isInhibited(void)
{ {
#ifdef Q_OS_LINUX #ifdef Q_OS_LINUX
return request_ != 0u; return request_ != 0u;
#endif
#ifdef Q_OS_MACOS
return preventSleepAssertionID != 0;
#endif #endif
return false; return false;
} }
...@@ -26,6 +26,10 @@ ...@@ -26,6 +26,10 @@
#define N_SERVICES 3 #define N_SERVICES 3
#endif #endif
#ifdef Q_OS_MACOS
#include "IOKit/pwr_mgt/IOPMLib.h"
#endif
class ScreenSaver : public QObject class ScreenSaver : public QObject
{ {
Q_OBJECT Q_OBJECT
...@@ -40,16 +44,21 @@ public: ...@@ -40,16 +44,21 @@ public:
#ifdef Q_OS_LINUX #ifdef Q_OS_LINUX
private: private:
bool createInterface(void); bool createInterface(void);
QString services_[N_SERVICES] = { "org.freedesktop.ScreenSaver", QString services_[N_SERVICES] = {"org.freedesktop.ScreenSaver",
"org.gnome.ScreenSaver", "org.gnome.ScreenSaver",
"org.mate.ScreenSaver" }; "org.mate.ScreenSaver"};
QString paths_[N_SERVICES] = { "/org/freedesktop/ScreenSaver", QString paths_[N_SERVICES] = {"/org/freedesktop/ScreenSaver",
"/org/gnome/ScreenSaver", "/org/gnome/ScreenSaver",
"/org/mate/ScreenSaver" }; "/org/mate/ScreenSaver"};
uint request_; uint request_;
QDBusConnection sessionBus_; QDBusConnection sessionBus_;
QDBusInterface* screenSaverInterface_; QDBusInterface* screenSaverInterface_;
#endif #endif
#ifdef Q_OS_MACOS
private:
IOPMAssertionID preventSleepAssertionID {0};
#endif
}; };
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment