Browse Source

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.
master
Vytautas Šaltenis 11 years ago
committed by Michael Stapelberg
parent
commit
4ff1d7fc5c
  1. 18
      i3lock.c

18
i3lock.c

@ -74,6 +74,7 @@ static struct xkb_keymap *xkb_keymap;
cairo_surface_t *img = NULL;
bool tile = false;
bool ignore_empty_password = false;
bool skip_repeated_empty_password = false;
/* isutf, u8_dec © 2005 Jeff Bezanson, public domain */
#define isutf(c) (((c) & 0xC0) != 0x80)
@ -325,6 +326,16 @@ static void redraw_timeout(EV_P_ ev_timer *w, int revents) {
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
* 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_KP_Enter:
case XKB_KEY_XF86ScreenSaver:
if (ignore_empty_password && input_position == 0) {
if (skip_without_validation()) {
clear_input();
return;
}
@ -357,8 +368,13 @@ static void handle_key_press(xcb_key_press_event_t *event) {
unlock_state = STATE_KEY_PRESSED;
redraw_screen();
input_done();
skip_repeated_empty_password = true;
return;
default:
skip_repeated_empty_password = false;
}
switch (ksym) {
case XKB_KEY_u:
if (ctrl) {
DEBUG("C-u pressed\n");

Loading…
Cancel
Save