You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
3.7 KiB
101 lines
3.7 KiB
3 years ago
|
From 63b985a5aae04b89f6a4357cb10dfeba9f482cd7 Mon Sep 17 00:00:00 2001
|
||
|
From: Mamoru TASAKA <mtasaka@fedoraproject.org>
|
||
|
Date: Tue, 6 Jul 2021 22:27:21 +0900
|
||
|
Subject: [PATCH 1/2] main_loop: consistently check init file after some
|
||
|
activitity occurred.
|
||
|
|
||
|
Current main_loop logic is:
|
||
|
* Block until some activity happens or timeout happens,
|
||
|
timeout is until last activity + blank_timeout
|
||
|
* When block is released, if 60sec has already passed since the last
|
||
|
time init file is checked, init file is checked again.
|
||
|
|
||
|
So:
|
||
|
* When a user has been editing init file for some long time,
|
||
|
activity has been occuring.
|
||
|
In this case, init file is checked every 60sec.
|
||
|
* However when:
|
||
|
- on "a" time init file is checked
|
||
|
- user edits init file, shortly
|
||
|
- then user stops activity
|
||
|
then the edited init file won't checked until last activity + blank_timeout
|
||
|
(because block won't be released until that time)
|
||
|
|
||
|
This behavior is inconsistent.
|
||
|
|
||
|
With this patch,
|
||
|
* When block is released, if 45sec (instead of 60sec) has already passed since the last
|
||
|
time init file is checked, init file is checked again.
|
||
|
* When some activity happens, main_loop is next blocked until some activity
|
||
|
happens or timeout, timeout is until last activity + 50sec, which
|
||
|
is shorter than activity + blank_timeout, because blank_timeout is more than 60sec.
|
||
|
|
||
|
Then when user stops activity, init file is checked again after 50sec (block is released),
|
||
|
so it is guaranteed that init file change is checked before 1min, when user may expect
|
||
|
blanking happens (when user changes init file so that blank should happen after 1 min).
|
||
|
So this behavior is consistent.
|
||
|
---
|
||
|
driver/xscreensaver.c | 13 +++++++++++--
|
||
|
1 file changed, 11 insertions(+), 2 deletions(-)
|
||
|
|
||
|
diff --git a/driver/xscreensaver.c b/driver/xscreensaver.c
|
||
|
index bfce5f7..24ea27c 100644
|
||
|
--- a/driver/xscreensaver.c
|
||
|
+++ b/driver/xscreensaver.c
|
||
|
@@ -1388,6 +1388,7 @@ main_loop (Display *dpy)
|
||
|
time_t last_checked_init_file = now;
|
||
|
Bool authenticated_p = False;
|
||
|
Bool ignore_motion_p = False;
|
||
|
+ Bool maybe_init_file_changed_p = False;
|
||
|
|
||
|
enum { UNBLANKED, BLANKED, LOCKED, AUTH } current_state = UNBLANKED;
|
||
|
|
||
|
@@ -1471,7 +1472,12 @@ main_loop (Display *dpy)
|
||
|
struct timeval tv;
|
||
|
time_t until;
|
||
|
switch (current_state) {
|
||
|
- case UNBLANKED: until = active_at + blank_timeout; break;
|
||
|
+ case UNBLANKED:
|
||
|
+ {
|
||
|
+ until = active_at + blank_timeout;
|
||
|
+ if (maybe_init_file_changed_p) until = active_at + 50;
|
||
|
+ break;
|
||
|
+ }
|
||
|
case BLANKED: until = blanked_at + lock_timeout; break;
|
||
|
default: until = 0;
|
||
|
}
|
||
|
@@ -1502,6 +1508,7 @@ main_loop (Display *dpy)
|
||
|
}
|
||
|
|
||
|
now = time ((time_t *) 0);
|
||
|
+ maybe_init_file_changed_p = False;
|
||
|
|
||
|
|
||
|
/********************************************************************
|
||
|
@@ -1566,6 +1573,7 @@ main_loop (Display *dpy)
|
||
|
XEvent xev;
|
||
|
XNextEvent (dpy, &xev);
|
||
|
now = time ((time_t *) 0);
|
||
|
+ maybe_init_file_changed_p = True;
|
||
|
|
||
|
/****************************************************************
|
||
|
Client Messages
|
||
|
@@ -1905,12 +1913,13 @@ main_loop (Display *dpy)
|
||
|
/* If it's time, see if the .xscreensaver file has changed, since that
|
||
|
might change the blank and lock timeouts.
|
||
|
*/
|
||
|
- if (now >= last_checked_init_file + 60)
|
||
|
+ if (now >= last_checked_init_file + 45)
|
||
|
{
|
||
|
last_checked_init_file = now;
|
||
|
if (verbose_p)
|
||
|
fprintf(stderr,"%s: checking init file\n", blurb());
|
||
|
read_init_files (False);
|
||
|
+ maybe_init_file_changed_p = False;
|
||
|
}
|
||
|
|
||
|
/* Now that events have been processed, see if the state should change,
|
||
|
--
|
||
|
2.31.1
|
||
|
|