i3 - improved tiling WM


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