diff options
author | Jonathan Bauer | 2017-11-15 10:05:29 +0100 |
---|---|---|
committer | Jonathan Bauer | 2017-11-15 10:05:29 +0100 |
commit | a98536b9fbda7d7fb2ff78906c1a2d6331f33df2 (patch) | |
tree | 4cc26402b6f18228773f0b4301477ac8325342e8 /src/server/util/platform/screensaver.cpp | |
parent | [client] Delay showBar by 750ms (diff) | |
download | pvs2-a98536b9fbda7d7fb2ff78906c1a2d6331f33df2.tar.gz pvs2-a98536b9fbda7d7fb2ff78906c1a2d6331f33df2.tar.xz pvs2-a98536b9fbda7d7fb2ff78906c1a2d6331f33df2.zip |
port to qt5
* got rid of the Win32/X11 differentiation
* due to QT5, additional packages are needed to compile
** libqt5x11extras5-dev
** libqt5svg5-dev
Diffstat (limited to 'src/server/util/platform/screensaver.cpp')
-rw-r--r-- | src/server/util/platform/screensaver.cpp | 74 |
1 files changed, 74 insertions, 0 deletions
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 <QX11Info> +#include <QStringList> +#include <QProcess> +#include <X11/Xlib.h> + +#ifdef X11_Xscreensaver_FOUND +# include <X11/extensions/scrnsaver.h> +#endif +#ifdef X11_dpms_FOUND +#include <X11/extensions/dpms.h> +#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 + } + +} |