Turn on the screen on successful authentication
Patch status: merged
Patch by Philippe Virouleau
Long description:
As described in ticket #1114, the screen may be left turned off on successful authentication. This commit fixes this behaviour by turning the screen back on after the authentication. Fixes #1114
To apply this patch, use:
curl http://cr.i3wm.org/patch/308/raw.patch | git am
b/i3lock.c
20 |
@@ -212,6 +212,10 @@ static void input_done(void) { |
21 |
if (pam_authenticate(pam_handle, 0) == PAM_SUCCESS) { |
22 |
DEBUG("successfully authenticated\n"); |
23 |
clear_password_memory(); |
24 |
+ /* Turn the screen on, as it may have been turned off |
25 |
+ * on release of the 'enter' key. */ |
26 |
+ if (dpms) |
27 |
+ dpms_set_mode(conn, XCB_DPMS_DPMS_MODE_ON); |
28 |
exit(0); |
29 |
} |
30 |
|
31 |
@@ -497,7 +501,7 @@ static void xcb_check_cb(EV_P_ ev_check *w, int revents) { |
32 |
/* If this was the backspace or escape key we are back at an |
33 |
* empty input, so turn off the screen if DPMS is enabled */ |
34 |
if (dpms && input_position == 0) |
35 |
- dpms_turn_off_screen(conn); |
36 |
+ dpms_set_mode(conn, XCB_DPMS_DPMS_MODE_OFF); |
37 |
|
38 |
break; |
39 |
|
40 |
@@ -771,7 +775,7 @@ int main(int argc, char *argv[]) { |
41 |
(void)load_keymap(); |
42 |
|
43 |
if (dpms) |
44 |
- dpms_turn_off_screen(conn); |
45 |
+ dpms_set_mode(conn, XCB_DPMS_DPMS_MODE_OFF); |
46 |
|
47 |
/* Initialize the libev event loop. */ |
48 |
main_loop = EV_DEFAULT; |
b/xcb.c
53 |
@@ -155,9 +155,13 @@ xcb_window_t open_fullscreen_window(xcb_connection_t *conn, xcb_screen_t *scr, c |
54 |
return win; |
55 |
} |
56 |
|
57 |
-void dpms_turn_off_screen(xcb_connection_t *conn) { |
58 |
+/* |
59 |
+ * Set the dpms level to 'mode'. |
60 |
+ * |
61 |
+ */ |
62 |
+void dpms_set_mode(xcb_connection_t *conn, xcb_dpms_dpms_mode_t mode) { |
63 |
xcb_dpms_enable(conn); |
64 |
- xcb_dpms_force_level(conn, XCB_DPMS_DPMS_MODE_OFF); |
65 |
+ xcb_dpms_force_level(conn, mode); |
66 |
xcb_flush(conn); |
67 |
} |
68 |
|
b/xcb.h
73 |
@@ -2,6 +2,7 @@ |
74 |
#define _XCB_H |
75 |
|
76 |
#include <xcb/xcb.h> |
77 |
+#include <xcb/dpms.h> |
78 |
|
79 |
extern xcb_connection_t *conn; |
80 |
extern xcb_screen_t *screen; |
81 |
@@ -10,7 +11,7 @@ xcb_visualtype_t *get_root_visual_type(xcb_screen_t *s); |
82 |
xcb_pixmap_t create_bg_pixmap(xcb_connection_t *conn, xcb_screen_t *scr, u_int32_t *resolution, char *color); |
83 |
xcb_window_t open_fullscreen_window(xcb_connection_t *conn, xcb_screen_t *scr, char *color, xcb_pixmap_t pixmap); |
84 |
void grab_pointer_and_keyboard(xcb_connection_t *conn, xcb_screen_t *screen, xcb_cursor_t cursor); |
85 |
-void dpms_turn_off_screen(xcb_connection_t *conn); |
86 |
+void dpms_set_mode(xcb_connection_t *conn, xcb_dpms_dpms_mode_t mode); |
87 |
xcb_cursor_t create_cursor(xcb_connection_t *conn, xcb_screen_t *screen, xcb_window_t win, int choice); |
88 |
|
89 |
#endif |