diff options
author | Martin Herkt <lachs0r@srsfckn.biz> | 2017-08-20 09:11:26 +0200 |
---|---|---|
committer | Martin Herkt <lachs0r@srsfckn.biz> | 2017-08-20 09:18:39 +0200 |
commit | 82d9419f62c90cecc13c492e3b68feebe0229daa (patch) | |
tree | 4baddc4c4957265991b7c5a99915d36779498d99 /video/out/x11_common.c | |
parent | a82007dd1ec8178589adc9dac89dcc42117812ce (diff) | |
download | mpv-82d9419f62c90cecc13c492e3b68feebe0229daa.tar.bz2 mpv-82d9419f62c90cecc13c492e3b68feebe0229daa.tar.xz |
Revert "x11: drop xscrnsaver use"
This broke screensaver/powersave inhibition with at least KDE and
LXDE. This is a release blocker.
Since fdo, KDE and GNOME idiots seem to be unable to reach
a consensus on a simple protocol, this seems unlikely to get
fixed upstream this year, so revert this change.
Fixes #4752.
Breaks #4706 but I don’t give a damn.
This reverts commit 3f75b3c3439241c209349908fa190c0382e44f05.
Diffstat (limited to 'video/out/x11_common.c')
-rw-r--r-- | video/out/x11_common.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/video/out/x11_common.c b/video/out/x11_common.c index 41c9d8b00a..30ad89746f 100644 --- a/video/out/x11_common.c +++ b/video/out/x11_common.c @@ -33,6 +33,7 @@ #include <X11/XKBlib.h> #include <X11/XF86keysym.h> +#include <X11/extensions/scrnsaver.h> #include <X11/extensions/dpms.h> #include <X11/extensions/Xinerama.h> #include <X11/extensions/Xrandr.h> @@ -1907,9 +1908,22 @@ static void xscreensaver_heartbeat(struct vo_x11_state *x11) { x11->screensaver_time_last = time; sem_post(&x11->screensaver_sem); + XResetScreenSaver(x11->display); } } +static int xss_suspend(Display *mDisplay, Bool suspend) +{ + int event, error, major, minor; + if (XScreenSaverQueryExtension(mDisplay, &event, &error) != True || + XScreenSaverQueryVersion(mDisplay, &major, &minor) != True) + return 0; + if (major < 1 || (major == 1 && minor < 1)) + return 0; + XScreenSaverSuspend(mDisplay, suspend); + return 1; +} + static void set_screensaver(struct vo_x11_state *x11, bool enabled) { Display *mDisplay = x11->display; @@ -1917,6 +1931,8 @@ static void set_screensaver(struct vo_x11_state *x11, bool enabled) return; MP_VERBOSE(x11, "%s screensaver.\n", enabled ? "Enabling" : "Disabling"); x11->screensaver_enabled = enabled; + if (xss_suspend(mDisplay, !enabled)) + return; int nothing; if (DPMSQueryExtension(mDisplay, ¬hing, ¬hing)) { BOOL onoff = 0; |