summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Rettberg2023-01-19 15:01:27 +0100
committerSimon Rettberg2023-01-19 15:01:27 +0100
commitdecd7562f96c5cefa35a791e824013bb66d1bac5 (patch)
tree6510d52e8be7954eedae9bf62456a18b2d6184bd
parent5.45 (diff)
downloadxscreensaver-decd7562f96c5cefa35a791e824013bb66d1bac5.tar.gz
xscreensaver-decd7562f96c5cefa35a791e824013bb66d1bac5.tar.xz
xscreensaver-decd7562f96c5cefa35a791e824013bb66d1bac5.zip
timers.c: Query MIT_SAVER extension for current idle time
Saver turns on too quickly under certain conditions... Try to work around it by explicitly querying idle time before doing any maths.
-rw-r--r--driver/timers.c28
1 files changed, 26 insertions, 2 deletions
diff --git a/driver/timers.c b/driver/timers.c
index 17781eb..7c2cef9 100644
--- a/driver/timers.c
+++ b/driver/timers.c
@@ -35,9 +35,7 @@
#include <X11/extensions/xidle.h>
#endif /* HAVE_XIDLE_EXTENSION */
-#ifdef HAVE_MIT_SAVER_EXTENSION
#include <X11/extensions/scrnsaver.h>
-#endif /* HAVE_MIT_SAVER_EXTENSION */
#ifdef HAVE_SGI_SAVER_EXTENSION
#include <X11/extensions/XScreenSaver.h>
@@ -709,6 +707,31 @@ flush_events (saver_info *si)
}
}
+static void
+slx_update_lat (saver_info *si)
+{
+ Display *dpy = si->dpy;
+ XScreenSaverInfo *ssi;
+ int event_basep, error_basep;
+
+ if (!XScreenSaverQueryExtension(dpy, &event_basep, &error_basep)) {
+ fprintf(stderr, "screen saver extension not supported\n");
+ return;
+ }
+ ssi = XScreenSaverAllocInfo();
+ if (ssi == NULL) {
+ fprintf(stderr, "couldn't allocate screen saver info\n");
+ return;
+ }
+ if (!XScreenSaverQueryInfo(dpy, DefaultRootWindow(dpy), ssi)) {
+ XFree(ssi);
+ fprintf(stderr, "couldn't query screen saver info\n");
+ return;
+ }
+ si->last_activity_time = time (NULL) - ssi->idle / 1000;
+ XFree(ssi);
+}
+
/* methods of detecting idleness:
explicitly informed by SGI SCREEN_SAVER server event;
@@ -858,6 +881,7 @@ sleep_until_idle (saver_info *si, Bool until_idle_p)
the the mouse has moved (user activity) or when we have read
an event (again, user activity.)
*/
+ slx_update_lat (si);
idle = 1000 * (si->last_activity_time - time ((time_t *) 0));
}