aboutsummaryrefslogtreecommitdiffstats
path: root/swaylock
diff options
context:
space:
mode:
authorLibravatar Ryan Dwyer <ryandwyer1@gmail.com>2018-10-13 16:52:13 +1000
committerLibravatar Ryan Dwyer <ryandwyer1@gmail.com>2018-10-15 00:26:27 +1000
commitc242712262c5cb751fc0f89050a7f7a24433b105 (patch)
tree73b8b7024da57319fa7038e186719faf319faa16 /swaylock
parentswaylock: Use common event loop (diff)
downloadsway-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.c22
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
13void clear_password_buffer(struct swaylock_password *pw) { 14void 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
43static 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
50static 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
42void swaylock_handle_key(struct swaylock_state *state, 58void 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 }