From 82d9419f62c90cecc13c492e3b68feebe0229daa Mon Sep 17 00:00:00 2001 From: Martin Herkt Date: Sun, 20 Aug 2017 09:11:26 +0200 Subject: [PATCH] Revert "x11: drop xscrnsaver use" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- README.md | 2 +- video/out/x11_common.c | 16 ++++++++++++++++ wscript | 1 + 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 5fa0c4cd67..ce38279235 100644 --- a/README.md +++ b/README.md @@ -96,7 +96,7 @@ Example: Essential dependencies (incomplete list): - gcc or clang -- X development headers (xlib, xrandr, xext, xinerama, libvdpau, +- X development headers (xlib, xrandr, xext, xscrnsaver, xinerama, libvdpau, libGL, GLX, EGL, xv, ...) - Audio output development headers (libasound/ALSA, pulseaudio) - FFmpeg libraries (libavutil libavcodec libavformat libswscale libavfilter 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 #include +#include #include #include #include @@ -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; diff --git a/wscript b/wscript index 2fb995041f..20241b1697 100644 --- a/wscript +++ b/wscript @@ -578,6 +578,7 @@ video_output_features = [ 'name': '--x11', 'desc': 'X11', 'func': check_pkg_config('x11', '>= 1.0.0', + 'xscrnsaver', '>= 1.0.0', 'xext', '>= 1.0.0', 'xinerama', '>= 1.0.0', 'xrandr', '>= 1.2.0'),