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)
}
#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;
}
......@@ -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
};
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