diff options
author | Ryan Dwyer <ryandwyer1@gmail.com> | 2018-10-13 16:52:13 +1000 |
---|---|---|
committer | Ryan Dwyer <ryandwyer1@gmail.com> | 2018-10-15 00:26:27 +1000 |
commit | c242712262c5cb751fc0f89050a7f7a24433b105 (patch) | |
tree | 73b8b7024da57319fa7038e186719faf319faa16 /swaylock | |
parent | swaylock: Use common event loop (diff) | |
download | sway-c242712262c5cb751fc0f89050a7f7a24433b105.tar.gz sway-c242712262c5cb751fc0f89050a7f7a24433b105.tar.zst sway-c242712262c5cb751fc0f89050a7f7a24433b105.zip |
swaylock: Remove indicator after 3 seconds
Diffstat (limited to 'swaylock')
-rw-r--r-- | swaylock/password.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/swaylock/password.c b/swaylock/password.c index 50b81f6b..fb610bf2 100644 --- a/swaylock/password.c +++ b/swaylock/password.c | |||
@@ -8,6 +8,7 @@ | |||
8 | #include <xkbcommon/xkbcommon.h> | 8 | #include <xkbcommon/xkbcommon.h> |
9 | #include "swaylock/swaylock.h" | 9 | #include "swaylock/swaylock.h" |
10 | #include "swaylock/seat.h" | 10 | #include "swaylock/seat.h" |
11 | #include "loop.h" | ||
11 | #include "unicode.h" | 12 | #include "unicode.h" |
12 | 13 | ||
13 | void clear_password_buffer(struct swaylock_password *pw) { | 14 | void clear_password_buffer(struct swaylock_password *pw) { |
@@ -39,6 +40,21 @@ static void append_ch(struct swaylock_password *pw, uint32_t codepoint) { | |||
39 | pw->len += utf8_size; | 40 | pw->len += utf8_size; |
40 | } | 41 | } |
41 | 42 | ||
43 | static void clear_indicator(int fd, short mask, void *data) { | ||
44 | struct swaylock_state *state = data; | ||
45 | state->clear_indicator_timer = NULL; | ||
46 | state->auth_state = AUTH_STATE_IDLE; | ||
47 | damage_state(state); | ||
48 | } | ||
49 | |||
50 | static void schedule_indicator_clear(struct swaylock_state *state) { | ||
51 | if (state->clear_indicator_timer) { | ||
52 | loop_remove_event(state->eventloop, state->clear_indicator_timer); | ||
53 | } | ||
54 | state->clear_indicator_timer = loop_add_timer( | ||
55 | state->eventloop, 3000, clear_indicator, state); | ||
56 | } | ||
57 | |||
42 | void swaylock_handle_key(struct swaylock_state *state, | 58 | void swaylock_handle_key(struct swaylock_state *state, |
43 | xkb_keysym_t keysym, uint32_t codepoint) { | 59 | xkb_keysym_t keysym, uint32_t codepoint) { |
44 | switch (keysym) { | 60 | switch (keysym) { |
@@ -79,11 +95,13 @@ void swaylock_handle_key(struct swaylock_state *state, | |||
79 | state->auth_state = AUTH_STATE_CLEAR; | 95 | state->auth_state = AUTH_STATE_CLEAR; |
80 | } | 96 | } |
81 | damage_state(state); | 97 | damage_state(state); |
98 | schedule_indicator_clear(state); | ||
82 | break; | 99 | break; |
83 | case XKB_KEY_Escape: | 100 | case XKB_KEY_Escape: |
84 | clear_password_buffer(&state->password); | 101 | clear_password_buffer(&state->password); |
85 | state->auth_state = AUTH_STATE_CLEAR; | 102 | state->auth_state = AUTH_STATE_CLEAR; |
86 | damage_state(state); | 103 | damage_state(state); |
104 | schedule_indicator_clear(state); | ||
87 | break; | 105 | break; |
88 | case XKB_KEY_Caps_Lock: | 106 | case XKB_KEY_Caps_Lock: |
89 | /* The state is getting active after this | 107 | /* The state is getting active after this |
@@ -91,6 +109,7 @@ void swaylock_handle_key(struct swaylock_state *state, | |||
91 | state->xkb.caps_lock = !state->xkb.caps_lock; | 109 | state->xkb.caps_lock = !state->xkb.caps_lock; |
92 | state->auth_state = AUTH_STATE_INPUT_NOP; | 110 | state->auth_state = AUTH_STATE_INPUT_NOP; |
93 | damage_state(state); | 111 | damage_state(state); |
112 | schedule_indicator_clear(state); | ||
94 | break; | 113 | break; |
95 | case XKB_KEY_Shift_L: | 114 | case XKB_KEY_Shift_L: |
96 | case XKB_KEY_Shift_R: | 115 | case XKB_KEY_Shift_R: |
@@ -104,12 +123,14 @@ void swaylock_handle_key(struct swaylock_state *state, | |||
104 | case XKB_KEY_Super_R: | 123 | case XKB_KEY_Super_R: |
105 | state->auth_state = AUTH_STATE_INPUT_NOP; | 124 | state->auth_state = AUTH_STATE_INPUT_NOP; |
106 | damage_state(state); | 125 | damage_state(state); |
126 | schedule_indicator_clear(state); | ||
107 | break; | 127 | break; |
108 | case XKB_KEY_u: | 128 | case XKB_KEY_u: |
109 | if (state->xkb.control) { | 129 | if (state->xkb.control) { |
110 | clear_password_buffer(&state->password); | 130 | clear_password_buffer(&state->password); |
111 | state->auth_state = AUTH_STATE_CLEAR; | 131 | state->auth_state = AUTH_STATE_CLEAR; |
112 | damage_state(state); | 132 | damage_state(state); |
133 | schedule_indicator_clear(state); | ||
113 | break; | 134 | break; |
114 | } | 135 | } |
115 | // fallthrough | 136 | // fallthrough |
@@ -118,6 +139,7 @@ void swaylock_handle_key(struct swaylock_state *state, | |||
118 | append_ch(&state->password, codepoint); | 139 | append_ch(&state->password, codepoint); |
119 | state->auth_state = AUTH_STATE_INPUT; | 140 | state->auth_state = AUTH_STATE_INPUT; |
120 | damage_state(state); | 141 | damage_state(state); |
142 | schedule_indicator_clear(state); | ||
121 | } | 143 | } |
122 | break; | 144 | break; |
123 | } | 145 | } |