diff options
-rw-r--r-- | sway/handlers.c | 17 | ||||
-rw-r--r-- | swaylock/main.c | 108 |
2 files changed, 60 insertions, 65 deletions
diff --git a/sway/handlers.c b/sway/handlers.c index fd174ac9..70633a1b 100644 --- a/sway/handlers.c +++ b/sway/handlers.c | |||
@@ -452,6 +452,7 @@ static bool handle_view_created(wlc_handle handle) { | |||
452 | wlc_view_focus(handle); | 452 | wlc_view_focus(handle); |
453 | wlc_view_bring_to_front(handle); | 453 | wlc_view_bring_to_front(handle); |
454 | newview = new_floating_view(handle); | 454 | newview = new_floating_view(handle); |
455 | /* fallthrough */ | ||
455 | case WLC_BIT_POPUP: | 456 | case WLC_BIT_POPUP: |
456 | wlc_view_bring_to_front(handle); | 457 | wlc_view_bring_to_front(handle); |
457 | break; | 458 | break; |
@@ -934,15 +935,15 @@ static bool handle_pointer_button(wlc_handle view, uint32_t time, const struct w | |||
934 | struct sway_binding *binding = mode->bindings->items[i]; | 935 | struct sway_binding *binding = mode->bindings->items[i]; |
935 | if ((modifiers->mods ^ binding->modifiers) == 0) { | 936 | if ((modifiers->mods ^ binding->modifiers) == 0) { |
936 | switch (state) { | 937 | switch (state) { |
937 | case WLC_BUTTON_STATE_PRESSED: { | 938 | case WLC_BUTTON_STATE_PRESSED: |
938 | if (!binding->release && handle_bindsym(binding, button, 0)) { | 939 | if (!binding->release && handle_bindsym(binding, button, 0)) { |
939 | return EVENT_HANDLED; | 940 | return EVENT_HANDLED; |
940 | } | 941 | } |
942 | break; | ||
943 | case WLC_BUTTON_STATE_RELEASED: | ||
944 | if (binding->release && handle_bindsym(binding, button, 0)) { | ||
945 | return EVENT_HANDLED; | ||
941 | } | 946 | } |
942 | case WLC_BUTTON_STATE_RELEASED: | ||
943 | if (binding->release && handle_bindsym(binding, button, 0)) { | ||
944 | return EVENT_HANDLED; | ||
945 | } | ||
946 | break; | 947 | break; |
947 | } | 948 | } |
948 | } | 949 | } |
diff --git a/swaylock/main.c b/swaylock/main.c index e624df46..c2615951 100644 --- a/swaylock/main.c +++ b/swaylock/main.c | |||
@@ -152,10 +152,11 @@ bool verify_password() { | |||
152 | void notify_key(enum wl_keyboard_key_state state, xkb_keysym_t sym, uint32_t code, uint32_t codepoint) { | 152 | void notify_key(enum wl_keyboard_key_state state, xkb_keysym_t sym, uint32_t code, uint32_t codepoint) { |
153 | int redraw_screen = 0; | 153 | int redraw_screen = 0; |
154 | char *password_realloc; | 154 | char *password_realloc; |
155 | int i; | ||
155 | 156 | ||
156 | if (state == WL_KEYBOARD_KEY_STATE_PRESSED) { | 157 | if (state == WL_KEYBOARD_KEY_STATE_PRESSED) { |
157 | switch (sym) { | 158 | switch (sym) { |
158 | case XKB_KEY_KP_Enter: // fallthrough | 159 | case XKB_KEY_KP_Enter: |
159 | case XKB_KEY_Return: | 160 | case XKB_KEY_Return: |
160 | render_data.auth_state = AUTH_STATE_VALIDATING; | 161 | render_data.auth_state = AUTH_STATE_VALIDATING; |
161 | 162 | ||
@@ -166,6 +167,7 @@ void notify_key(enum wl_keyboard_key_state state, xkb_keysym_t sym, uint32_t cod | |||
166 | if (verify_password()) { | 167 | if (verify_password()) { |
167 | exit(0); | 168 | exit(0); |
168 | } | 169 | } |
170 | |||
169 | render_data.auth_state = AUTH_STATE_INVALID; | 171 | render_data.auth_state = AUTH_STATE_INVALID; |
170 | redraw_screen = 1; | 172 | redraw_screen = 1; |
171 | 173 | ||
@@ -174,73 +176,65 @@ void notify_key(enum wl_keyboard_key_state state, xkb_keysym_t sym, uint32_t cod | |||
174 | password[0] = '\0'; | 176 | password[0] = '\0'; |
175 | break; | 177 | break; |
176 | case XKB_KEY_BackSpace: | 178 | case XKB_KEY_BackSpace: |
177 | { | 179 | i = strlen(password); |
178 | int i = strlen(password); | 180 | if (i > 0) { |
179 | if (i > 0) { | 181 | password[i - 1] = '\0'; |
180 | password[i - 1] = '\0'; | 182 | render_data.auth_state = AUTH_STATE_BACKSPACE; |
181 | render_data.auth_state = AUTH_STATE_BACKSPACE; | 183 | redraw_screen = 1; |
182 | redraw_screen = 1; | ||
183 | } | ||
184 | break; | ||
185 | } | 184 | } |
186 | case XKB_KEY_Control_L: // fallthrough | 185 | break; |
187 | case XKB_KEY_Control_R: // fallthrough | 186 | case XKB_KEY_Control_L: |
188 | case XKB_KEY_Shift_L: // fallthrough | 187 | case XKB_KEY_Control_R: |
189 | case XKB_KEY_Shift_R: // fallthrough | 188 | case XKB_KEY_Shift_L: |
190 | case XKB_KEY_Caps_Lock: // fallthrough | 189 | case XKB_KEY_Shift_R: |
191 | case XKB_KEY_Shift_Lock: // fallthrough | 190 | case XKB_KEY_Caps_Lock: |
192 | case XKB_KEY_Meta_L: // fallthrough | 191 | case XKB_KEY_Shift_Lock: |
193 | case XKB_KEY_Meta_R: // fallthrough | 192 | case XKB_KEY_Meta_L: |
194 | case XKB_KEY_Alt_L: // fallthrough | 193 | case XKB_KEY_Meta_R: |
195 | case XKB_KEY_Alt_R: // fallthrough | 194 | case XKB_KEY_Alt_L: |
196 | case XKB_KEY_Super_L: // fallthrough | 195 | case XKB_KEY_Alt_R: |
197 | case XKB_KEY_Super_R: // fallthrough | 196 | case XKB_KEY_Super_L: |
198 | case XKB_KEY_Hyper_L: // fallthrough | 197 | case XKB_KEY_Super_R: |
198 | case XKB_KEY_Hyper_L: | ||
199 | case XKB_KEY_Hyper_R: | 199 | case XKB_KEY_Hyper_R: |
200 | { | 200 | break; // don't draw screen on modifier keys |
201 | // don't draw screen on modifier keys | 201 | case XKB_KEY_Escape: |
202 | break; | 202 | case XKB_KEY_u: |
203 | } | ||
204 | case XKB_KEY_Escape: // fallthrough | ||
205 | case XKB_KEY_u: // fallthrough | ||
206 | case XKB_KEY_U: | 203 | case XKB_KEY_U: |
207 | { | 204 | // clear password buffer on ctrl-u (or escape for i3lock compatibility) |
208 | // clear password buffer on ctrl-u (or escape for i3lock compatibility) | 205 | if (sym == XKB_KEY_Escape || xkb_state_mod_name_is_active(registry->input->xkb.state, |
209 | if (sym == XKB_KEY_Escape || xkb_state_mod_name_is_active(registry->input->xkb.state, | 206 | XKB_MOD_NAME_CTRL, XKB_STATE_MODS_EFFECTIVE) > 0) { |
210 | XKB_MOD_NAME_CTRL, XKB_STATE_MODS_EFFECTIVE) > 0) { | 207 | render_data.auth_state = AUTH_STATE_BACKSPACE; |
211 | render_data.auth_state = AUTH_STATE_BACKSPACE; | 208 | redraw_screen = 1; |
212 | redraw_screen = 1; | ||
213 | 209 | ||
210 | password_size = 1024; | ||
211 | free(password); | ||
212 | password = malloc(password_size); | ||
213 | password[0] = '\0'; | ||
214 | break; | ||
215 | } | ||
216 | /* fallthrough */ | ||
217 | default: | ||
218 | render_data.auth_state = AUTH_STATE_INPUT; | ||
219 | redraw_screen = 1; | ||
220 | i = strlen(password); | ||
221 | if (i + 1 == password_size) { | ||
222 | password_size += 1024; | ||
223 | password_realloc = realloc(password, password_size); | ||
224 | // reset password if realloc fails. | ||
225 | if (password_realloc == NULL) { | ||
214 | password_size = 1024; | 226 | password_size = 1024; |
215 | free(password); | 227 | free(password); |
216 | password = malloc(password_size); | 228 | password = malloc(password_size); |
217 | password[0] = '\0'; | 229 | password[0] = '\0'; |
218 | break; | 230 | break; |
231 | } else { | ||
232 | password = password_realloc; | ||
219 | } | 233 | } |
220 | } | 234 | } |
221 | default: | 235 | password[i] = (char)codepoint; |
222 | { | 236 | password[i + 1] = '\0'; |
223 | render_data.auth_state = AUTH_STATE_INPUT; | 237 | break; |
224 | redraw_screen = 1; | ||
225 | int i = strlen(password); | ||
226 | if (i + 1 == password_size) { | ||
227 | password_size += 1024; | ||
228 | password_realloc = realloc(password, password_size); | ||
229 | // reset password if realloc fails. | ||
230 | if (password_realloc == NULL) { | ||
231 | password_size = 1024; | ||
232 | free(password); | ||
233 | password = malloc(password_size); | ||
234 | password[0] = '\0'; | ||
235 | break; | ||
236 | } else { | ||
237 | password = password_realloc; | ||
238 | } | ||
239 | } | ||
240 | password[i] = (char)codepoint; | ||
241 | password[i + 1] = '\0'; | ||
242 | break; | ||
243 | } | ||
244 | } | 238 | } |
245 | if (redraw_screen) { | 239 | if (redraw_screen) { |
246 | render(&render_data, config); | 240 | render(&render_data, config); |