[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#458041: updated patch



Lubos Lunak <l.lunak@kde.org> informed me that it is better to still use 
XResetScreenSaver for screensaver which ignores the X internal timers like the 
ones from KDE since rev916966. I tested it with enabled dpms and kde different 
screensaver types and it works fine.
From f6abc0242df2dba902ea4d59be2af125e2492fde Mon Sep 17 00:00:00 2001
From: Resul Cetin <resul-cetin@gmx.net>
Date: Thu, 11 Dec 2008 17:50:28 +0100
Subject: [PATCH] Use XScreenSaverExtension instead of typing text via Xtest

---
 config.h.in    |    2 +-
 configure      |   26 +++++++++++++-------------
 configure.ac   |    8 ++++----
 debian/control |    2 +-
 src/xcommon.c  |   52 ++++++++++++++++++++++++----------------------------
 5 files changed, 43 insertions(+), 47 deletions(-)

diff --git a/config.h.in b/config.h.in
index 6180c73..455e380 100644
--- a/config.h.in
+++ b/config.h.in
@@ -296,7 +296,7 @@
 #undef HAVE_XINERAMA
 
 /* XTest support */
-#undef HAVE_XTESTEXTENSION
+#undef HAVE_XSSEXTENSION
 
 /* Xv support */
 #undef HAVE_XV
diff --git a/configure b/configure
index a6c5138..6c2dd5e 100755
--- a/configure
+++ b/configure
@@ -25906,13 +25906,13 @@ _ACEOF
 fi
 
 
-	        echo "$as_me:$LINENO: checking for XTestFakeKeyEvent in -lXtst" >&5
-echo $ECHO_N "checking for XTestFakeKeyEvent in -lXtst... $ECHO_C" >&6
-if test "${ac_cv_lib_Xtst_XTestFakeKeyEvent+set}" = set; then
+	        echo "$as_me:$LINENO: checking for XScreenSaverSuspend in -lXss" >&5
+echo $ECHO_N "checking for XScreenSaverSuspend in -lXss... $ECHO_C" >&6
+if test "${ac_cv_lib_Xss_XScreenSaverSuspend+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_check_lib_save_LIBS=$LIBS
-LIBS="-lXtst $X_PRE_LIBS $X_LIBS -lX11 $X_EXTRA_LIBS -lXext $LIBS"
+LIBS="-lXss $X_PRE_LIBS $X_LIBS -lX11 $X_EXTRA_LIBS -lXext $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -25926,11 +25926,11 @@ extern "C"
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
-char XTestFakeKeyEvent ();
+char XScreenSaverSuspend ();
 int
 main ()
 {
-XTestFakeKeyEvent ();
+XScreenSaverSuspend ();
   ;
   return 0;
 }
@@ -25956,26 +25956,26 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_status=$?
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
-  ac_cv_lib_Xtst_XTestFakeKeyEvent=yes
+  ac_cv_lib_Xss_XScreenSaverSuspend=yes
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-ac_cv_lib_Xtst_XTestFakeKeyEvent=no
+ac_cv_lib_Xss_XScreenSaverSuspend=no
 fi
 rm -f conftest.err conftest.$ac_objext \
       conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_Xtst_XTestFakeKeyEvent" >&5
-echo "${ECHO_T}$ac_cv_lib_Xtst_XTestFakeKeyEvent" >&6
-if test $ac_cv_lib_Xtst_XTestFakeKeyEvent = yes; then
+echo "$as_me:$LINENO: result: $ac_cv_lib_Xss_XScreenSaverSuspend" >&5
+echo "${ECHO_T}$ac_cv_lib_Xss_XScreenSaverSuspend" >&6
+if test $ac_cv_lib_Xss_XScreenSaverSuspend = yes; then
 
 cat >>confdefs.h <<\_ACEOF
-#define HAVE_XTESTEXTENSION
+#define HAVE_XSSEXTENSION
 _ACEOF
 
-            X11_LIBS="$X11_LIBS -lXtst"
+            X11_LIBS="$X11_LIBS -lXss"
 fi
 
 
diff --git a/configure.ac b/configure.ac
index 9692b31..ee240df 100644
--- a/configure.ac
+++ b/configure.ac
@@ -118,10 +118,10 @@ if test x"$no_x" != x"yes"; then
 	    X11_LIBS="$X11_LIBS -lXinerama"],,
 	    [$X_PRE_LIBS $X_LIBS -lX11 $X_EXTRA_LIBS -lXext])
 
-	dnl check for XTest
-        AC_CHECK_LIB([Xtst],[XTestFakeKeyEvent],
-            [AC_DEFINE([HAVE_XTESTEXTENSION],,[XTest support])
-            X11_LIBS="$X11_LIBS -lXtst"],,
+	dnl check for XSs
+        AC_CHECK_LIB([Xss],[XScreenSaverSuspend],
+            [AC_DEFINE([HAVE_XSSEXTENSION],,[XSs support])
+            X11_LIBS="$X11_LIBS -lXss"],,
 	    [$X_PRE_LIBS $X_LIBS -lX11 $X_EXTRA_LIBS -lXext])
 
 	dnl check for Xvidmode
diff --git a/debian/control b/debian/control
index 2479259..2b38e42 100644
--- a/debian/control
+++ b/debian/control
@@ -3,7 +3,7 @@ Section: x11
 Priority: optional
 Maintainer: Debian QA Group <packages@qa.debian.org>
 Build-Depends: debhelper (>= 7), zlib1g-dev, libpng-dev, libfreetype6-dev, libx11-dev, libxext-dev, libxinerama-dev,
- libxt-dev, libxtst-dev, libxv-dev, libxxf86vm-dev, libxml2-dev, fontforge
+ libxt-dev, libxss-dev, libxv-dev, libxxf86vm-dev, libxml2-dev, fontforge
 Standards-Version: 3.6.2
 Homepage: http://tvtime.net/
 
diff --git a/src/xcommon.c b/src/xcommon.c
index 8e3be4c..408f231 100644
--- a/src/xcommon.c
+++ b/src/xcommon.c
@@ -45,8 +45,8 @@
 #include <X11/keysym.h>
 #include <X11/cursorfont.h>
 #include <X11/extensions/XShm.h>
-#ifdef HAVE_XTESTEXTENSION
-#include <X11/extensions/XTest.h>
+#ifdef HAVE_XSSEXTENSION
+#include <X11/extensions/scrnsaver.h>
 #endif
 
 #include "xfullscreen.h"
@@ -67,7 +67,7 @@ static Window wm_window;
 static Window fs_window;
 static Window output_window;
 static GC gc;
-static int have_xtest;
+static int have_xss;
 static int output_width, output_height;
 static int output_aspect;
 static int output_on_root;
@@ -107,10 +107,6 @@ static Atom wm_delete_window;
 static Atom xawtv_station;
 static Atom xawtv_remote;
 
-#ifdef HAVE_XTESTEXTENSION
-static KeyCode kc_shift_l; /* Fake key to send. */
-#endif
-
 static area_t video_area;
 static area_t window_area;
 static area_t scale_area;
@@ -248,12 +244,12 @@ static void x11_wait_mapped( Display *dpy, Window win )
     } while ( (event.type != MapNotify) || (event.xmap.event != win) );
 }
 
-static int have_xtestextention( void )
+static int have_xssextention( void )
 {  
-#ifdef HAVE_XTESTEXTENSION
-    int dummy1, dummy2, dummy3, dummy4;
+#ifdef HAVE_XSSEXTENSION
+    int dummy1, dummy2;
   
-    return (XTestQueryExtension( display, &dummy1, &dummy2, &dummy3, &dummy4 ) == True);
+    return (XScreenSaverQueryExtension( display, &dummy1, &dummy2 ) == True);
 #endif
     return 0;
 }
@@ -843,7 +839,7 @@ int xcommon_open_display( const char *user_geometry, int aspect, int verbose )
     output_aspect = aspect;
     output_height = 576;
 
-    have_xtest = 0;
+    have_xss = 0;
     output_on_root = 0;
     has_ewmh_state_fullscreen = 0;
     has_ewmh_state_above = 0;
@@ -927,13 +923,16 @@ int xcommon_open_display( const char *user_geometry, int aspect, int verbose )
         xfullscreen_print_summary( xf );
     }
 
-#ifdef HAVE_XTESTEXTENSION
-    kc_shift_l = XKeysymToKeycode( display, XK_Shift_L );
-#endif
-    have_xtest = have_xtestextention();
-    if( have_xtest && xcommon_verbose ) {
-        fprintf( stderr, "xcommon: Have XTest, will use it to ping the screensaver.\n" );
+    have_xss = have_xssextention();
+    if( have_xss && xcommon_verbose ) {
+        fprintf( stderr, "xcommon: Have XSS, will use it to disable the screensaver.\n" );
+    }
+
+#ifdef HAVE_XSSEXTENSION
+    if ( have_xss ) {
+        XScreenSaverSuspend( display, True );
     }
+#endif
 
     /* Initially, get the best width for our height. */
     output_width = xv_get_width_for_height( output_height );
@@ -1110,17 +1109,9 @@ void xcommon_ping_screensaver( void )
     }
 
     gettimeofday( &curtime, 0 );
-    if( timediff( &curtime, &last_ping_time ) > SCREENSAVER_PING_TIME ) { 
+    if( timediff( &curtime, &last_ping_time ) > SCREENSAVER_PING_TIME ) {
         last_ping_time = curtime;
-#ifdef HAVE_XTESTEXTENSION
-        if( have_xtest ) {
-            XTestFakeKeyEvent( display, kc_shift_l, True, CurrentTime );
-            XTestFakeKeyEvent( display, kc_shift_l, False, CurrentTime );
-        } else 
-#endif
-        {
-            XResetScreenSaver( display );
-        }
+        XResetScreenSaver( display );
     }
 }
 
@@ -1715,6 +1706,11 @@ void xcommon_poll_events( input_t *in )
 
 void xcommon_close_display( void )
 {
+#ifdef HAVE_XSSEXTENSION
+    if ( have_xss ) {
+        XScreenSaverSuspend( display, False );
+    }
+#endif
     XDestroyWindow( display, output_window );
     XDestroyWindow( display, wm_window );
     XDestroyWindow( display, fs_window );
-- 
1.6.0.6


Reply to: