diff options
author | Vytautas Ĺ altenis <vytas@rtfb.lt> | 2014-03-06 23:06:28 +0200 |
---|---|---|
committer | Michael Stapelberg <michael@stapelberg.de> | 2014-03-23 10:01:59 +0100 |
commit | 52541fb7ee23a9552a70f1fcb957ba584df3a8e5 (patch) | |
tree | ad5501835b82f28d9e5ae41e97dd2262db91933f /i3lock.c | |
parent | c7cd4cd3b52ca2fa073ebeb84a86a693c77a825d (diff) |
Discard half-entered passwd after some inactivity
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.
Diffstat (limited to 'i3lock.c')
-rw-r--r-- | i3lock.c | 9 |
1 files changed, 9 insertions, 0 deletions
@@ -35,6 +35,7 @@ #include "xinerama.h" #define TSTAMP_N_SECS(n) (n * 1.0) +#define TSTAMP_N_MINS(n) (60 * TSTAMP_N_SECS(n)) #define START_TIMER(timer_obj, timeout, callback) \ timer_obj = start_timer(timer_obj, timeout, callback) #define STOP_TIMER(timer_obj) \ @@ -62,6 +63,7 @@ struct ev_loop *main_loop; static struct ev_timer *clear_pam_wrong_timeout; static struct ev_timer *clear_indicator_timeout; static struct ev_timer *dpms_timeout; +static struct ev_timer *discard_passwd_timeout; extern unlock_state_t unlock_state; extern pam_state_t pam_state; @@ -256,6 +258,12 @@ static void turn_off_monitors_cb(EV_P_ ev_timer *w, int revents) { STOP_TIMER(dpms_timeout); } +static void discard_passwd_cb(EV_P_ ev_timer *w, int revents) { + clear_input(); + turn_monitors_off(); + STOP_TIMER(discard_passwd_timeout); +} + static void input_done(void) { if (clear_pam_wrong_timeout) { ev_timer_stop(main_loop, clear_pam_wrong_timeout); @@ -413,6 +421,7 @@ static void handle_key_press(xcb_key_press_event_t *event) { } STOP_TIMER(clear_indicator_timeout); + START_TIMER(discard_passwd_timeout, TSTAMP_N_MINS(3), discard_passwd_cb); } /* |