diff options
Diffstat (limited to 'driver')
-rw-r--r-- | driver/timers.c | 13 | ||||
-rw-r--r-- | driver/windows.c | 4 | ||||
-rw-r--r-- | driver/xscreensaver.h | 1 |
3 files changed, 18 insertions, 0 deletions
diff --git a/driver/timers.c b/driver/timers.c index fc8b47a..591b568 100644 --- a/driver/timers.c +++ b/driver/timers.c @@ -689,6 +689,19 @@ swallow_unlock_typeahead_events (saver_info *si, XEvent *e) memset (buf, 0, sizeof(buf)); } +void +flush_events (saver_info *si) +{ + int i; + XEvent xe; + for (i = 0; i < 10; ++i) { + while (XtAppPending (si->app) != 0) { + XtAppNextEvent (si->app, &xe); + dispatch_event (si, &xe); + } + usleep(5000); + } +} /* methods of detecting idleness: diff --git a/driver/windows.c b/driver/windows.c index c54f15e..ceba8c8 100644 --- a/driver/windows.c +++ b/driver/windows.c @@ -337,6 +337,10 @@ grab_keyboard_and_mouse (saver_info *si, Window window, Cursor cursor, { snprintf (cmd, sizeof(cmd), "%s %s", euc, "post"); exec_and_wait (si, cmd); + if (ret) { + /* The external command might have generated some x/input events */ + flush_events (si); + } } return ret; } diff --git a/driver/xscreensaver.h b/driver/xscreensaver.h index c5b5644..2a3ae02 100644 --- a/driver/xscreensaver.h +++ b/driver/xscreensaver.h @@ -129,6 +129,7 @@ extern void activate_lock_timer (XtPointer si, XtIntervalId *id); extern void reset_watchdog_timer (saver_info *si, Bool on_p); extern void idle_timer (XtPointer si, XtIntervalId *id); extern void de_race_timer (XtPointer si, XtIntervalId *id); +void flush_events (saver_info *si); extern void sleep_until_idle (saver_info *si, Bool until_idle_p); extern void reset_timers (saver_info *si); extern void schedule_wakeup_event (saver_info *si, Time when, Bool verbose_p); |