From: Lorenzo D. <lor...@fa...> - 2010-03-16 17:36:24
|
# HG changeset patch # User Lorenzo Desole <lor...@fa...> # Date 1264454820 0 # Node ID d8898da3b41a5e44017cab6be8709d2a03351499 # Parent 7327a489f0341e97bde5f2e97e1bdc4bd7822ed4 Add support for XScreenSaver diff --git a/configure.ac b/configure.ac --- a/configure.ac +++ b/configure.ac @@ -273,7 +273,23 @@ AC_SUBST(XTEST_LIBS) AM_CONDITIONAL(HAVE_XTESTEXTENSION, test x$ac_have_xtest = "xyes") - + +dnl +dnl XScreenSaver Extension +dnl +PKG_CHECK_MODULES([XSSAVER], [xscrnsaver], [ac_have_xscreensaver="yes"], [ + AC_CHECK_LIB(Xss, XScreenSaverQueryExtension, + XSSAVER_LIBS="-lXss" + ac_have_xscreensaver="yes",, $X_LIBS $X_PRE_LIBS -lXext $X_EXTRA_LIBS) +]) + +if test "x$ac_have_xscreensaver" = "xyes"; then + AC_DEFINE(HAVE_XSSAVEREXTENSION,,[Define this if you have libXss installed]) +fi + +AC_SUBST(XSSAVER_LIBS) +AM_CONDITIONAL(HAVE_XSSAVEREXTENSION, test x$ac_have_xscreensaver = "xyes") + dnl dnl readline diff --git a/src/xitk/Makefile.am b/src/xitk/Makefile.am --- a/src/xitk/Makefile.am +++ b/src/xitk/Makefile.am @@ -70,7 +70,7 @@ $(top_builddir)/src/xitk/Imlib-light/libImlib-light.a \ $(top_builddir)/src/xitk/oxine/liboxine.a \ $(X_PRE_LIBS) $(LIRC_LIBS) $(XFT_LIBS) \ - $(X_LIBS) $(XTEST_LIBS) $(CURL_LIBS) $(NVTVSIMPLE_LIBS) \ + $(X_LIBS) $(XTEST_LIBS) $(XSSAVER_LIBS) $(CURL_LIBS) $(NVTVSIMPLE_LIBS) \ -lX11 -lXext -lm $(DBG_LIBS) $(XV_LIB) $(LIBPNG_LIBS) $(INTLLIBS) \ $(THREAD_LIBS) diff --git a/src/xitk/panel.c b/src/xitk/panel.c --- a/src/xitk/panel.c +++ b/src/xitk/panel.c @@ -449,8 +449,7 @@ screensaver_timer++; if(screensaver_timer >= gGui->ssaver_timeout) { - screensaver_timer = 0; - video_window_reset_ssaver(); + screensaver_timer = video_window_reset_ssaver(); } } diff --git a/src/xitk/videowin.c b/src/xitk/videowin.c --- a/src/xitk/videowin.c +++ b/src/xitk/videowin.c @@ -39,6 +39,9 @@ #endif #ifdef HAVE_XTESTEXTENSION #include <X11/extensions/XTest.h> +#endif +#ifdef HAVE_XSSAVEREXTENSION +#include <X11/extensions/scrnsaver.h> #endif #include "common.h" @@ -2261,9 +2264,33 @@ } -void video_window_reset_ssaver(void) { +long int video_window_get_ssaver_idle(void) { - if(gGui->ssaver_enabled && (xitk_get_last_keypressed_time() >= (long int) gGui->ssaver_timeout)) { +#ifdef HAVE_XSSAVEREXTENSION + long int ssaver_idle = 0; + int dummy = 0; + if(XScreenSaverQueryExtension(gGui->video_display, &dummy, &dummy)) { + XScreenSaverInfo *ssaverinfo = XScreenSaverAllocInfo(); + XScreenSaverQueryInfo(gGui->video_display, (DefaultRootWindow(gGui->video_display)), ssaverinfo); + ssaver_idle = ssaverinfo->idle; + XFree(ssaverinfo); + return ssaver_idle/1000; + } +#endif + + return xitk_get_last_keypressed_time(); +} + + +long int video_window_reset_ssaver(void) { + + /* fprintf(stderr, "Idletime %d, timeout %d\n", video_window_get_ssaver_idle(), (long int) gGui->ssaver_timeout); */ + + long int idle = 0; + + if(gGui->ssaver_enabled && ((idle = video_window_get_ssaver_idle()) >= (long int) gGui->ssaver_timeout)) { + idle = 0; + /* fprintf(stderr, "resetting ssaver\n"); */ #ifdef HAVE_XTESTEXTENSION if(gVw.have_xtest == True) { @@ -2322,6 +2349,7 @@ XUnlockDisplay(gGui->video_display); } } + return idle; } void video_window_get_frame_size(int *w, int *h) { diff --git a/src/xitk/videowin.h b/src/xitk/videowin.h --- a/src/xitk/videowin.h +++ b/src/xitk/videowin.h @@ -81,7 +81,9 @@ void video_window_update_logo(void); void video_window_change_skins(int); -void video_window_reset_ssaver(void); +long int video_window_get_ssaver_idle(void); + +long int video_window_reset_ssaver(void); void video_window_get_frame_size(int *w, int *h); |