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 /driver/timers.c | |
| 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.
Diffstat (limited to 'driver/timers.c')
| -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)); } |
