X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=i3lock.c;h=0383ebea575eb34027161d65cbed2d341dda533b;hb=619c791a202f550c0f7ea46cff0677fc5a0235da;hp=df5d952f2c1ab6b8f0436cad8943c446a672c735;hpb=59705b05b5533bcb78d4c92966379914aa7b656d;p=i3%2Fi3lock diff --git a/i3lock.c b/i3lock.c index df5d952..0383ebe 100644 --- a/i3lock.c +++ b/i3lock.c @@ -367,9 +367,13 @@ static void handle_key_press(xcb_key_press_event_t *event) { } 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; @@ -414,7 +418,11 @@ static void handle_key_press(xcb_key_press_event_t *event) { * see issue #50. */ return; + case XKB_KEY_h: case XKB_KEY_BackSpace: + if (ksym == XKB_KEY_h && !ctrl) + break; + if (input_position == 0) return; @@ -423,7 +431,7 @@ static void handle_key_press(xcb_key_press_event_t *event) { 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(); @@ -619,6 +627,22 @@ static void xcb_prepare_cb(EV_P_ ev_prepare *w, int revents) { xcb_flush(conn); } +/* + * Try closing logind sleep lock fd passed over from xss-lock, in case we're + * being run from there. + * + */ +static void maybe_close_sleep_lock_fd(void) { + const char *sleep_lock_fd = getenv("XSS_SLEEP_LOCK_FD"); + char *endptr; + if (sleep_lock_fd && *sleep_lock_fd != 0) { + long int fd = strtol(sleep_lock_fd, &endptr, 10); + if (*endptr == 0) { + close(fd); + } + } +} + /* * Instead of polling the X connection socket we leave this to * xcb_poll_for_event() which knows better than we can ever know. @@ -653,6 +677,7 @@ static void xcb_check_cb(EV_P_ ev_check *w, int revents) { break; case XCB_MAP_NOTIFY: + maybe_close_sleep_lock_fd(); if (!dont_fork) { /* After the first MapNotify, we never fork again. We don’t * expect to get another MapNotify, but better be sure… */ @@ -948,6 +973,7 @@ int main(int argc, char *argv[]) { if (pid == 0) { /* Child */ close(xcb_get_file_descriptor(conn)); + maybe_close_sleep_lock_fd(); raise_loop(win); exit(EXIT_SUCCESS); }