Discard half-entered passwd after some inactivity
Patch status: merged
Patch by Vytautas Ĺ altenis
Long description:
When you start typing a password and then wander off, let's discard that attempt after a few minutes of inactivity (and turn off the monitors if dpms is on). This is a real actual case of making the software cat-proof: when my cat treads over the keyboard at night, I don't want the monitors to shine for the rest of the night.
To apply this patch, use:
curl http://cr.i3wm.org/patch/487/raw.patch | git am
b/i3lock.c
20 |
@@ -35,6 +35,7 @@ |
21 |
#include "xinerama.h" |
22 |
|
23 |
#define TSTAMP_N_SECS(n) (n * 1.0) |
24 |
+#define TSTAMP_N_MINS(n) (60 * TSTAMP_N_SECS(n)) |
25 |
#define START_TIMER(timer_obj, timeout, callback) \ |
26 |
timer_obj = start_timer(timer_obj, timeout, callback) |
27 |
#define STOP_TIMER(timer_obj) \ |
28 |
@@ -62,6 +63,7 @@ struct ev_loop *main_loop; |
29 |
static struct ev_timer *clear_pam_wrong_timeout; |
30 |
static struct ev_timer *clear_indicator_timeout; |
31 |
static struct ev_timer *dpms_timeout; |
32 |
+static struct ev_timer *discard_passwd_timeout; |
33 |
extern unlock_state_t unlock_state; |
34 |
extern pam_state_t pam_state; |
35 |
|
36 |
@@ -256,6 +258,12 @@ static void turn_off_monitors_cb(EV_P_ ev_timer *w, int revents) { |
37 |
STOP_TIMER(dpms_timeout); |
38 |
} |
39 |
|
40 |
+static void discard_passwd_cb(EV_P_ ev_timer *w, int revents) { |
41 |
+ clear_input(); |
42 |
+ turn_monitors_off(); |
43 |
+ STOP_TIMER(discard_passwd_timeout); |
44 |
+} |
45 |
+ |
46 |
static void input_done(void) { |
47 |
if (clear_pam_wrong_timeout) { |
48 |
ev_timer_stop(main_loop, clear_pam_wrong_timeout); |
49 |
@@ -413,6 +421,7 @@ static void handle_key_press(xcb_key_press_event_t *event) { |
50 |
} |
51 |
|
52 |
STOP_TIMER(clear_indicator_timeout); |
53 |
+ START_TIMER(discard_passwd_timeout, TSTAMP_N_MINS(3), discard_passwd_cb); |
54 |
} |
55 |
|
56 |
/* |