]> git.sur5r.net Git - i3/i3lock/blobdiff - i3lock.c
Ignore empty passwd after repeated Enter keypress
[i3/i3lock] / i3lock.c
index 84b4c7d14fa39cdee9c495908ed35e97231098e2..b383522f6ceac071166a30b5ecb9025f58a8f643 100644 (file)
--- a/i3lock.c
+++ b/i3lock.c
@@ -74,6 +74,7 @@ static struct xkb_keymap *xkb_keymap;
 cairo_surface_t *img = NULL;
 bool tile = false;
 bool ignore_empty_password = false;
+bool skip_repeated_empty_password = false;
 
 /* isutf, u8_dec © 2005 Jeff Bezanson, public domain */
 #define isutf(c) (((c) & 0xC0) != 0x80)
@@ -325,6 +326,16 @@ static void redraw_timeout(EV_P_ ev_timer *w, int revents) {
     free(w);
 }
 
+static bool skip_without_validation(void) {
+    if (input_position != 0)
+        return false;
+
+    if (skip_repeated_empty_password || ignore_empty_password)
+        return true;
+
+    return false;
+}
+
 /*
  * Handle key presses. Fixes state, then looks up the key symbol for the
  * given keycode, then looks up the key symbol (as UCS-2), converts it to
@@ -349,7 +360,7 @@ static void handle_key_press(xcb_key_press_event_t *event) {
     case XKB_KEY_Return:
     case XKB_KEY_KP_Enter:
     case XKB_KEY_XF86ScreenSaver:
-        if (ignore_empty_password && input_position == 0) {
+        if (skip_without_validation()) {
             clear_input();
             return;
         }
@@ -357,8 +368,13 @@ static void handle_key_press(xcb_key_press_event_t *event) {
         unlock_state = STATE_KEY_PRESSED;
         redraw_screen();
         input_done();
+        skip_repeated_empty_password = true;
         return;
+    default:
+        skip_repeated_empty_password = false;
+    }
 
+    switch (ksym) {
     case XKB_KEY_u:
         if (ctrl) {
             DEBUG("C-u pressed\n");