summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Ryan Dwyer <ryandwyer1@gmail.com>2018-10-13 16:56:35 +1000
committerLibravatar Ryan Dwyer <ryandwyer1@gmail.com>2018-10-15 00:26:27 +1000
commitfa11b7f7012d153ba9728fe718ffc1a2650d6e98 (patch)
tree08cc24e1471e707ea104f605a9cf7f47b72d81e0
parentswaylock: Remove indicator after 3 seconds (diff)
downloadsway-fa11b7f7012d153ba9728fe718ffc1a2650d6e98.tar.gz
sway-fa11b7f7012d153ba9728fe718ffc1a2650d6e98.tar.zst
sway-fa11b7f7012d153ba9728fe718ffc1a2650d6e98.zip
swaylock: clear password after 10 seconds
-rw-r--r--include/swaylock/swaylock.h1
-rw-r--r--swaylock/password.c21
2 files changed, 22 insertions, 0 deletions
diff --git a/include/swaylock/swaylock.h b/include/swaylock/swaylock.h
index 792d34cf..ae042c4f 100644
--- a/include/swaylock/swaylock.h
+++ b/include/swaylock/swaylock.h
@@ -56,6 +56,7 @@ struct swaylock_password {
56struct swaylock_state { 56struct swaylock_state {
57 struct loop *eventloop; 57 struct loop *eventloop;
58 struct loop_event *clear_indicator_timer; // clears the indicator 58 struct loop_event *clear_indicator_timer; // clears the indicator
59 struct loop_event *clear_password_timer; // clears the password buffer
59 struct wl_display *display; 60 struct wl_display *display;
60 struct wl_compositor *compositor; 61 struct wl_compositor *compositor;
61 struct zwlr_layer_shell_v1 *layer_shell; 62 struct zwlr_layer_shell_v1 *layer_shell;
diff --git a/swaylock/password.c b/swaylock/password.c
index fb610bf2..5ab50042 100644
--- a/swaylock/password.c
+++ b/swaylock/password.c
@@ -55,6 +55,23 @@ static void schedule_indicator_clear(struct swaylock_state *state) {
55 state->eventloop, 3000, clear_indicator, state); 55 state->eventloop, 3000, clear_indicator, state);
56} 56}
57 57
58static void clear_password(int fd, short mask, void *data) {
59 struct swaylock_state *state = data;
60 state->clear_password_timer = NULL;
61 state->auth_state = AUTH_STATE_CLEAR;
62 clear_password_buffer(&state->password);
63 damage_state(state);
64 schedule_indicator_clear(state);
65}
66
67static void schedule_password_clear(struct swaylock_state *state) {
68 if (state->clear_password_timer) {
69 loop_remove_event(state->eventloop, state->clear_password_timer);
70 }
71 state->clear_password_timer = loop_add_timer(
72 state->eventloop, 10000, clear_password, state);
73}
74
58void swaylock_handle_key(struct swaylock_state *state, 75void swaylock_handle_key(struct swaylock_state *state,
59 xkb_keysym_t keysym, uint32_t codepoint) { 76 xkb_keysym_t keysym, uint32_t codepoint) {
60 switch (keysym) { 77 switch (keysym) {
@@ -96,6 +113,7 @@ void swaylock_handle_key(struct swaylock_state *state,
96 } 113 }
97 damage_state(state); 114 damage_state(state);
98 schedule_indicator_clear(state); 115 schedule_indicator_clear(state);
116 schedule_password_clear(state);
99 break; 117 break;
100 case XKB_KEY_Escape: 118 case XKB_KEY_Escape:
101 clear_password_buffer(&state->password); 119 clear_password_buffer(&state->password);
@@ -110,6 +128,7 @@ void swaylock_handle_key(struct swaylock_state *state,
110 state->auth_state = AUTH_STATE_INPUT_NOP; 128 state->auth_state = AUTH_STATE_INPUT_NOP;
111 damage_state(state); 129 damage_state(state);
112 schedule_indicator_clear(state); 130 schedule_indicator_clear(state);
131 schedule_password_clear(state);
113 break; 132 break;
114 case XKB_KEY_Shift_L: 133 case XKB_KEY_Shift_L:
115 case XKB_KEY_Shift_R: 134 case XKB_KEY_Shift_R:
@@ -124,6 +143,7 @@ void swaylock_handle_key(struct swaylock_state *state,
124 state->auth_state = AUTH_STATE_INPUT_NOP; 143 state->auth_state = AUTH_STATE_INPUT_NOP;
125 damage_state(state); 144 damage_state(state);
126 schedule_indicator_clear(state); 145 schedule_indicator_clear(state);
146 schedule_password_clear(state);
127 break; 147 break;
128 case XKB_KEY_u: 148 case XKB_KEY_u:
129 if (state->xkb.control) { 149 if (state->xkb.control) {
@@ -140,6 +160,7 @@ void swaylock_handle_key(struct swaylock_state *state,
140 state->auth_state = AUTH_STATE_INPUT; 160 state->auth_state = AUTH_STATE_INPUT;
141 damage_state(state); 161 damage_state(state);
142 schedule_indicator_clear(state); 162 schedule_indicator_clear(state);
163 schedule_password_clear(state);
143 } 164 }
144 break; 165 break;
145 } 166 }