typedef void (*ev_callback_t)(EV_P_ ev_timer *w, int revents);
-/* We need this for libxkbfile */
char color[7] = "ffffff";
int inactivity_timeout = 30;
uint32_t last_resolution[2];
static void clear_pam_wrong(EV_P_ ev_timer *w, int revents) {
DEBUG("clearing pam wrong\n");
pam_state = STATE_PAM_IDLE;
- unlock_state = STATE_STARTED;
redraw_screen();
/* Clear modifier string. */
input_position = 0;
clear_password_memory();
password[input_position] = '\0';
-
- /* Hide the unlock indicator after a bit if the password buffer is
- * empty. */
- if (unlock_indicator) {
- START_TIMER(clear_indicator_timeout, 1.0, clear_indicator_cb);
- unlock_state = STATE_BACKSPACE_ACTIVE;
- redraw_screen();
- unlock_state = STATE_KEY_PRESSED;
- }
}
static void discard_passwd_cb(EV_P_ ev_timer *w, int revents) {
static void input_done(void) {
STOP_TIMER(clear_pam_wrong_timeout);
pam_state = STATE_PAM_VERIFY;
+ unlock_state = STATE_STARTED;
redraw_screen();
if (pam_authenticate(pam_handle, 0) == PAM_SUCCESS) {
}
switch (ksym) {
+ case XKB_KEY_j:
case XKB_KEY_Return:
case XKB_KEY_KP_Enter:
case XKB_KEY_XF86ScreenSaver:
+ if (ksym == XKB_KEY_j && !ctrl)
+ break;
+
if (pam_state == STATE_PAM_WRONG)
return;
switch (ksym) {
case XKB_KEY_u:
- if (ctrl) {
+ case XKB_KEY_Escape:
+ if ((ksym == XKB_KEY_u && ctrl) ||
+ ksym == XKB_KEY_Escape) {
DEBUG("C-u pressed\n");
clear_input();
+ /* Hide the unlock indicator after a bit if the password buffer is
+ * empty. */
+ if (unlock_indicator) {
+ START_TIMER(clear_indicator_timeout, 1.0, clear_indicator_cb);
+ unlock_state = STATE_BACKSPACE_ACTIVE;
+ redraw_screen();
+ unlock_state = STATE_KEY_PRESSED;
+ }
return;
}
break;
- case XKB_KEY_Escape:
- clear_input();
+ case XKB_KEY_Delete:
+ case XKB_KEY_KP_Delete:
+ /* Deleting forward doesn’t make sense, as i3lock doesn’t allow you
+ * to move the cursor when entering a password. We need to eat this
+ * key press so that it won’t be treated as part of the password,
+ * see issue #50. */
return;
+ case XKB_KEY_h:
case XKB_KEY_BackSpace:
+ if (ksym == XKB_KEY_h && !ctrl)
+ break;
+
if (input_position == 0)
return;
password[input_position] = '\0';
/* Hide the unlock indicator after a bit if the password buffer is
- * empty. */
+ * empty. */
START_TIMER(clear_indicator_timeout, 1.0, clear_indicator_cb);
unlock_state = STATE_BACKSPACE_ACTIVE;
redraw_screen();