Browse Source

Merge branch 'master' of https://github.com/i3/i3lock

master
Chris Guillott 8 years ago
parent
commit
cbd454e493
  1. 28
      i3lock.c

28
i3lock.c

@ -45,6 +45,7 @@
timer_obj = stop_timer(timer_obj) timer_obj = stop_timer(timer_obj)
typedef void (*ev_callback_t)(EV_P_ ev_timer *w, int revents); typedef void (*ev_callback_t)(EV_P_ ev_timer *w, int revents);
static void input_done(void);
char color[7] = "ffffff"; char color[7] = "ffffff";
@ -84,6 +85,7 @@ extern unlock_state_t unlock_state;
extern pam_state_t pam_state; extern pam_state_t pam_state;
int failed_attempts = 0; int failed_attempts = 0;
bool show_failed_attempts = false; bool show_failed_attempts = false;
bool retry_verification = false;
static struct xkb_state *xkb_state; static struct xkb_state *xkb_state;
static struct xkb_context *xkb_context; static struct xkb_context *xkb_context;
@ -215,6 +217,17 @@ ev_timer *stop_timer(ev_timer *timer_obj) {
return NULL; return NULL;
} }
/*
* Neccessary calls after ending input via enter or others
*
*/
static void finish_input(void) {
password[input_position] = '\0';
unlock_state = STATE_KEY_PRESSED;
redraw_screen();
input_done();
}
/* /*
* Resets pam_state to STATE_PAM_IDLE 2 seconds after an unsuccessful * Resets pam_state to STATE_PAM_IDLE 2 seconds after an unsuccessful
* authentication event. * authentication event.
@ -233,6 +246,12 @@ static void clear_pam_wrong(EV_P_ ev_timer *w, int revents) {
/* Now free this timeout. */ /* Now free this timeout. */
STOP_TIMER(clear_pam_wrong_timeout); STOP_TIMER(clear_pam_wrong_timeout);
/* retry with input done during pam verification */
if (retry_verification) {
retry_verification = false;
finish_input();
}
} }
static void clear_indicator_cb(EV_P_ ev_timer *w, int revents) { static void clear_indicator_cb(EV_P_ ev_timer *w, int revents) {
@ -402,17 +421,16 @@ static void handle_key_press(xcb_key_press_event_t *event) {
if (ksym == XKB_KEY_j && !ctrl) if (ksym == XKB_KEY_j && !ctrl)
break; break;
if (pam_state == STATE_PAM_WRONG) if (pam_state == STATE_PAM_WRONG) {
retry_verification = true;
return; return;
}
if (skip_without_validation()) { if (skip_without_validation()) {
clear_input(); clear_input();
return; return;
} }
password[input_position] = '\0'; finish_input();
unlock_state = STATE_KEY_PRESSED;
redraw_screen();
input_done();
skip_repeated_empty_password = true; skip_repeated_empty_password = true;
return; return;
default: default:

Loading…
Cancel
Save