]> git.sur5r.net Git - i3/i3lock/commitdiff
display error when backspace is pressed without any input (#172)
authorMichael Stapelberg <stapelberg@users.noreply.github.com>
Sun, 14 Jan 2018 21:17:43 +0000 (22:17 +0100)
committerGitHub <noreply@github.com>
Sun, 14 Jan 2018 21:17:43 +0000 (22:17 +0100)
This adds some feedback to a keypress which previously had no visible effect.

While the text “no input” isn’t the most descriptive, it was the only one I
could think of which fit into the unlock indicator circle. If you have a better
suggestion, let me know.

fixes #164

i3lock.c
unlock_indicator.c
unlock_indicator.h

index d6f2151671811dcf7641178dd0ec552abb983878..f9513f5a63b510c56b922c1a11044a89851cdae5 100644 (file)
--- a/i3lock.c
+++ b/i3lock.c
@@ -472,8 +472,12 @@ static void handle_key_press(xcb_key_press_event_t *event) {
             if (ksym == XKB_KEY_h && !ctrl)
                 break;
 
-            if (input_position == 0)
+            if (input_position == 0) {
+                START_TIMER(clear_indicator_timeout, 1.0, clear_indicator_cb);
+                unlock_state = STATE_NOTHING_TO_DELETE;
+                redraw_screen();
                 return;
+            }
 
             /* decrement input_position to point to the previous glyph */
             u8_dec(password, &input_position);
index c6793d81b18c7317dcce656f1b337ad5aa11e2ba..da1a7f23663c3ced725be12311d60be243b24c4b 100644 (file)
@@ -164,6 +164,10 @@ xcb_pixmap_t draw_image(uint32_t *resolution) {
                 cairo_set_source_rgba(ctx, 250.0 / 255, 0, 0, 0.75);
                 break;
             default:
+                if (unlock_state == STATE_NOTHING_TO_DELETE) {
+                    cairo_set_source_rgba(ctx, 250.0 / 255, 0, 0, 0.75);
+                    break;
+                }
                 cairo_set_source_rgba(ctx, 0, 0, 0, 0.75);
                 break;
         }
@@ -179,6 +183,11 @@ xcb_pixmap_t draw_image(uint32_t *resolution) {
                 cairo_set_source_rgb(ctx, 125.0 / 255, 51.0 / 255, 0);
                 break;
             case STATE_AUTH_IDLE:
+                if (unlock_state == STATE_NOTHING_TO_DELETE) {
+                    cairo_set_source_rgb(ctx, 125.0 / 255, 51.0 / 255, 0);
+                    break;
+                }
+
                 cairo_set_source_rgb(ctx, 51.0 / 255, 125.0 / 255, 0);
                 break;
         }
@@ -219,6 +228,9 @@ xcb_pixmap_t draw_image(uint32_t *resolution) {
                 text = "lock failed!";
                 break;
             default:
+                if (unlock_state == STATE_NOTHING_TO_DELETE) {
+                    text = "no input";
+                }
                 if (show_failed_attempts && failed_attempts > 0) {
                     if (failed_attempts > 999) {
                         text = "> 999";
index 232162005b73bc0685979527297d19e7d6784030..93c1de8b34234cd40fe40e0eef063a0d356a4cc3 100644 (file)
@@ -2,20 +2,21 @@
 #define _UNLOCK_INDICATOR_H
 
 typedef enum {
-    STATE_STARTED = 0,         /* default state */
-    STATE_KEY_PRESSED = 1,     /* key was pressed, show unlock indicator */
-    STATE_KEY_ACTIVE = 2,      /* a key was pressed recently, highlight part
+    STATE_STARTED = 0,           /* default state */
+    STATE_KEY_PRESSED = 1,       /* key was pressed, show unlock indicator */
+    STATE_KEY_ACTIVE = 2,        /* a key was pressed recently, highlight part
                                    of the unlock indicator. */
-    STATE_BACKSPACE_ACTIVE = 3 /* backspace was pressed recently, highlight
+    STATE_BACKSPACE_ACTIVE = 3 /* backspace was pressed recently, highlight
                                    part of the unlock indicator in red. */
+    STATE_NOTHING_TO_DELETE = 4, /* backspace was pressed, but there is nothing to delete. */
 } unlock_state_t;
 
 typedef enum {
-    STATE_AUTH_IDLE = 0,         /* no authenticator interaction at the moment */
-    STATE_AUTH_VERIFY = 1,       /* currently verifying the password via authenticator */
-    STATE_AUTH_LOCK = 2,         /* currently locking the screen */
-    STATE_AUTH_WRONG = 3,        /* the password was wrong */
-    STATE_I3LOCK_LOCK_FAILED = 4 /* i3lock failed to load */
+    STATE_AUTH_IDLE = 0,          /* no authenticator interaction at the moment */
+    STATE_AUTH_VERIFY = 1,        /* currently verifying the password via authenticator */
+    STATE_AUTH_LOCK = 2,          /* currently locking the screen */
+    STATE_AUTH_WRONG = 3,         /* the password was wrong */
+    STATE_I3LOCK_LOCK_FAILED = 4, /* i3lock failed to load */
 } auth_state_t;
 
 xcb_pixmap_t draw_image(uint32_t* resolution);