Delay to turn off the screen after wrong passwd
Patch status: needinfo
Patch by Vytautas Ĺ altenis
To apply this patch, use:
curl http://cr.i3wm.org/patch/462/raw.patch | git am
b/i3lock.c
| 13 |
@@ -34,6 +34,7 @@ |
| 14 |
#include "unlock_indicator.h" |
| 15 |
#include "xinerama.h" |
| 16 |
|
| 17 |
+#define TSTAMP_N_SECS(n) (n * 1.0) |
| 18 |
#define START_TIMER(timer_obj, timeout, callback) \ |
| 19 |
timer_obj = start_timer(timer_obj, timeout, callback) |
| 20 |
#define STOP_TIMER(timer_obj) \ |
| 21 |
@@ -59,6 +60,7 @@ static bool dont_fork = false; |
| 22 |
struct ev_loop *main_loop; |
| 23 |
static struct ev_timer *clear_pam_wrong_timeout; |
| 24 |
static struct ev_timer *clear_indicator_timeout; |
| 25 |
+static struct ev_timer *dpms_timeout; |
| 26 |
extern unlock_state_t unlock_state; |
| 27 |
extern pam_state_t pam_state; |
| 28 |
|
| 29 |
@@ -246,6 +248,13 @@ static void clear_input(void) {
|
| 30 |
unlock_state = STATE_KEY_PRESSED; |
| 31 |
} |
| 32 |
|
| 33 |
+static void turn_off_monitors_cb(EV_P_ ev_timer *w, int revents) {
|
| 34 |
+ if (input_position == 0) |
| 35 |
+ turn_monitors_off(); |
| 36 |
+ |
| 37 |
+ STOP_TIMER(dpms_timeout); |
| 38 |
+} |
| 39 |
+ |
| 40 |
static void input_done(void) {
|
| 41 |
if (clear_pam_wrong_timeout) {
|
| 42 |
ev_timer_stop(main_loop, clear_pam_wrong_timeout); |
| 43 |
@@ -545,10 +554,10 @@ static void xcb_check_cb(EV_P_ ev_check *w, int revents) {
|
| 44 |
handle_key_release((xcb_key_release_event_t*)event); |
| 45 |
|
| 46 |
/* If this was the backspace or escape key we are back at an |
| 47 |
- * empty input, so turn off the screen if DPMS is enabled */ |
| 48 |
- if (input_position == 0) |
| 49 |
- turn_monitors_off(); |
| 50 |
- |
| 51 |
+ * empty input, so turn off the screen if DPMS is enabled, but |
| 52 |
+ * only do that after some timeout: maybe user mistyped and |
| 53 |
+ * will type again right away */ |
| 54 |
+ START_TIMER(dpms_timeout, TSTAMP_N_SECS(30), turn_off_monitors_cb); |
| 55 |
break; |
| 56 |
|
| 57 |
case XCB_VISIBILITY_NOTIFY: |