From a98536b9fbda7d7fb2ff78906c1a2d6331f33df2 Mon Sep 17 00:00:00 2001 From: Jonathan Bauer Date: Wed, 15 Nov 2017 10:05:29 +0100 Subject: port to qt5 * got rid of the Win32/X11 differentiation * due to QT5, additional packages are needed to compile ** libqt5x11extras5-dev ** libqt5svg5-dev --- src/server/util/platform/screensaver.cpp | 74 ++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 src/server/util/platform/screensaver.cpp (limited to 'src/server/util/platform/screensaver.cpp') diff --git a/src/server/util/platform/screensaver.cpp b/src/server/util/platform/screensaver.cpp new file mode 100644 index 0000000..efffba9 --- /dev/null +++ b/src/server/util/platform/screensaver.cpp @@ -0,0 +1,74 @@ +#include "screensaver.h" + +#include +#include +#include +#include + +#ifdef X11_Xscreensaver_FOUND +# include +#endif +#ifdef X11_dpms_FOUND +#include +#endif + +namespace { + + Display *display = NULL; + bool extensionSupported = false; + bool dpmsSupported = false; + + bool init() + { + if (display != NULL) { + return true; + } + display = QX11Info::display(); + if (display == NULL) { + return false; + } +#ifdef X11_Xscreensaver_FOUND + int dummy; + extensionSupported = (XScreenSaverQueryExtension(display, &dummy, &dummy) == True); +#endif +#ifdef X11_dpms_FOUND + dpmsSupported = (DPMSCapable(display) == True); +#endif + return true; + } + +} + +namespace ScreenSaver { + + void allowSaverAndStandby(bool allow) + { + if (!init()) + return; +#ifdef X11_Xscreensaver_FOUND + if (extensionSupported) { + XScreenSaverSuspend(display, allow ? False : True); + return; + } +#endif + // TODO: Maybe try some fallback, call xset, or trigger some event periodically + } + + void forceUnlockAndScreenOn() + { + if (!init()) + return; + QProcess process; + process.start("xscreensaver-command", QStringList() << "-deactivate"); + process.waitForFinished(100); +#ifdef X11_dpms_FOUND + CARD16 power_level; + BOOL state; + if (DPMSInfo(display, &power_level, &state) && state) { + DPMSForceLevel(display, DPMSModeOn); + return; + } +#endif + } + +} -- cgit v1.2.3-55-g7522