mirror of https://github.com/i3/i3lock.git
Ignore empty passwd after repeated Enter keypress
When no ignore_empty_password flag is specified, but Enter key is held down for some time, i3lock enters a finite, but hours-long loop verifying empty password. Don't do that, skip empty password verification if nothing was pressed after last Enter keypress. Again, making the software cat-proof.pull/1/head
parent
178b858116
commit
4ff1d7fc5c
18
i3lock.c
18
i3lock.c
|
@ -74,6 +74,7 @@ static struct xkb_keymap *xkb_keymap;
|
||||||
cairo_surface_t *img = NULL;
|
cairo_surface_t *img = NULL;
|
||||||
bool tile = false;
|
bool tile = false;
|
||||||
bool ignore_empty_password = false;
|
bool ignore_empty_password = false;
|
||||||
|
bool skip_repeated_empty_password = false;
|
||||||
|
|
||||||
/* isutf, u8_dec © 2005 Jeff Bezanson, public domain */
|
/* isutf, u8_dec © 2005 Jeff Bezanson, public domain */
|
||||||
#define isutf(c) (((c) & 0xC0) != 0x80)
|
#define isutf(c) (((c) & 0xC0) != 0x80)
|
||||||
|
@ -325,6 +326,16 @@ static void redraw_timeout(EV_P_ ev_timer *w, int revents) {
|
||||||
free(w);
|
free(w);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool skip_without_validation(void) {
|
||||||
|
if (input_position != 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (skip_repeated_empty_password || ignore_empty_password)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Handle key presses. Fixes state, then looks up the key symbol for the
|
* Handle key presses. Fixes state, then looks up the key symbol for the
|
||||||
* given keycode, then looks up the key symbol (as UCS-2), converts it to
|
* given keycode, then looks up the key symbol (as UCS-2), converts it to
|
||||||
|
@ -349,7 +360,7 @@ static void handle_key_press(xcb_key_press_event_t *event) {
|
||||||
case XKB_KEY_Return:
|
case XKB_KEY_Return:
|
||||||
case XKB_KEY_KP_Enter:
|
case XKB_KEY_KP_Enter:
|
||||||
case XKB_KEY_XF86ScreenSaver:
|
case XKB_KEY_XF86ScreenSaver:
|
||||||
if (ignore_empty_password && input_position == 0) {
|
if (skip_without_validation()) {
|
||||||
clear_input();
|
clear_input();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -357,8 +368,13 @@ static void handle_key_press(xcb_key_press_event_t *event) {
|
||||||
unlock_state = STATE_KEY_PRESSED;
|
unlock_state = STATE_KEY_PRESSED;
|
||||||
redraw_screen();
|
redraw_screen();
|
||||||
input_done();
|
input_done();
|
||||||
|
skip_repeated_empty_password = true;
|
||||||
return;
|
return;
|
||||||
|
default:
|
||||||
|
skip_repeated_empty_password = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (ksym) {
|
||||||
case XKB_KEY_u:
|
case XKB_KEY_u:
|
||||||
if (ctrl) {
|
if (ctrl) {
|
||||||
DEBUG("C-u pressed\n");
|
DEBUG("C-u pressed\n");
|
||||||
|
|
Loading…
Reference in New Issue