]> git.sur5r.net Git - i3/i3lock/commitdiff
Discard half-entered passwd after some inactivity
authorVytautas Ĺ altenis <vytas@rtfb.lt>
Thu, 6 Mar 2014 21:06:28 +0000 (23:06 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Sun, 23 Mar 2014 09:01:59 +0000 (10:01 +0100)
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.

i3lock.c

index dbd06d4b48c0d982990678c10c26ae72fe41b29b..954f79ab8ec400ca44c23d2eca8010d308920502 100644 (file)
--- a/i3lock.c
+++ b/i3lock.c
@@ -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);
 }
 
 /*