diff options
author | Simon Rettberg | 2023-01-19 15:01:27 +0100 |
---|---|---|
committer | Simon Rettberg | 2023-01-19 15:01:27 +0100 |
commit | decd7562f96c5cefa35a791e824013bb66d1bac5 (patch) | |
tree | 6510d52e8be7954eedae9bf62456a18b2d6184bd | |
parent | 5.45 (diff) | |
download | xscreensaver-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.c | 28 |
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)); } |