i3lock-color

The world's most popular non-default computer lockscreen.
Index Commits Files Refs README LICENSE
commit 1495903e5d72ddd7fbc1adb699b609feee435c83
parent 661344463aadbccf85120d056d30f486838c0dbd
Author: Sebastian Ullrich <sebasti@nullri.ch>
Date:   Fri, 29 Mar 2013 00:43:43 +0100

Fix resetting the password after failed authentications

This has been broken by commit 661344.

Diffstat:
Mi3lock.c | 33+++++++++++++++++++++------------
1 file changed, 21 insertions(+), 12 deletions(-)
diff --git a/i3lock.c b/i3lock.c
@@ -172,6 +172,19 @@ static void clear_pam_wrong(EV_P_ ev_timer *w, int revents) {
     clear_pam_wrong_timeout = NULL;
 }
 
+static void clear_input(void) {
+    input_position = 0;
+    clear_password_memory();
+    password[input_position] = '\0';
+
+    /* Hide the unlock indicator after a bit if the password buffer is
+     * empty. */
+    start_clear_indicator_timeout();
+    unlock_state = STATE_BACKSPACE_ACTIVE;
+    redraw_screen();
+    unlock_state = STATE_KEY_PRESSED;
+}
+
 static void input_done(void) {
     if (clear_pam_wrong_timeout) {
         ev_timer_stop(main_loop, clear_pam_wrong_timeout);
@@ -192,6 +205,7 @@ static void input_done(void) {
         fprintf(stderr, "Authentication failure\n");
 
     pam_state = STATE_PAM_WRONG;
+    clear_input();
     redraw_screen();
 
     /* Clear this state after 2 seconds (unless the user enters another
@@ -257,20 +271,15 @@ static void handle_key_press(xcb_key_press_event_t *event) {
         unlock_state = STATE_KEY_PRESSED;
         redraw_screen();
         input_done();
+        return;
+
     case XKB_KEY_u:
-        if (!ctrl)
-            break;
-    case XKB_KEY_Escape:
-        input_position = 0;
-        clear_password_memory();
-        password[input_position] = '\0';
+        if (ctrl)
+            clear_input();
+        return;
 
-        /* Hide the unlock indicator after a bit if the password buffer is
-         * empty. */
-        start_clear_indicator_timeout();
-        unlock_state = STATE_BACKSPACE_ACTIVE;
-        redraw_screen();
-        unlock_state = STATE_KEY_PRESSED;
+    case XKB_KEY_Escape:
+        clear_input();
         return;
 
     case XKB_KEY_BackSpace: