]> git.sur5r.net Git - i3/i3lock/commitdiff
Turn on the screen on successful authentication
authorPhilippe Virouleau <philippe.virouleau@imag.fr>
Sun, 10 Nov 2013 22:12:46 +0000 (23:12 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Tue, 12 Nov 2013 07:24:14 +0000 (08:24 +0100)
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

i3lock.c
xcb.c
xcb.h

index 533a28d27d67a5db7b3ba8a2cc8784903127794e..8c33ea4dde16ef2cca9f41f1c2b322f1c5660dc2 100644 (file)
--- a/i3lock.c
+++ b/i3lock.c
@@ -212,6 +212,10 @@ static void input_done(void) {
     if (pam_authenticate(pam_handle, 0) == PAM_SUCCESS) {
         DEBUG("successfully authenticated\n");
         clear_password_memory();
+        /* Turn the screen on, as it may have been turned off
+         * on release of the 'enter' key. */
+        if (dpms)
+            dpms_set_mode(conn, XCB_DPMS_DPMS_MODE_ON);
         exit(0);
     }
 
@@ -497,7 +501,7 @@ static void xcb_check_cb(EV_P_ ev_check *w, int revents) {
                 /* If this was the backspace or escape key we are back at an
                  * empty input, so turn off the screen if DPMS is enabled */
                 if (dpms && input_position == 0)
-                    dpms_turn_off_screen(conn);
+                    dpms_set_mode(conn, XCB_DPMS_DPMS_MODE_OFF);
 
                 break;
 
@@ -771,7 +775,7 @@ int main(int argc, char *argv[]) {
     (void)load_keymap();
 
     if (dpms)
-        dpms_turn_off_screen(conn);
+        dpms_set_mode(conn, XCB_DPMS_DPMS_MODE_OFF);
 
     /* Initialize the libev event loop. */
     main_loop = EV_DEFAULT;
diff --git a/xcb.c b/xcb.c
index 5f3d298416947c37fff1f6e5da72ca00222da275..fc27d0bde2d91826113fcf382721d743c81d5da2 100644 (file)
--- a/xcb.c
+++ b/xcb.c
@@ -155,9 +155,13 @@ xcb_window_t open_fullscreen_window(xcb_connection_t *conn, xcb_screen_t *scr, c
     return win;
 }
 
-void dpms_turn_off_screen(xcb_connection_t *conn) {
+/*
+ * Set the dpms level to 'mode'.
+ *
+ */
+void dpms_set_mode(xcb_connection_t *conn, xcb_dpms_dpms_mode_t mode) {
     xcb_dpms_enable(conn);
-    xcb_dpms_force_level(conn, XCB_DPMS_DPMS_MODE_OFF);
+    xcb_dpms_force_level(conn, mode);
     xcb_flush(conn);
 }
 
diff --git a/xcb.h b/xcb.h
index 7941980afc838b0452ad0929de1f689c5b982da0..1e0cbb16d0a5af259cfb87988c4f27c85adb0ba9 100644 (file)
--- a/xcb.h
+++ b/xcb.h
@@ -2,6 +2,7 @@
 #define _XCB_H
 
 #include <xcb/xcb.h>
+#include <xcb/dpms.h>
 
 extern xcb_connection_t *conn;
 extern xcb_screen_t *screen;
@@ -10,7 +11,7 @@ xcb_visualtype_t *get_root_visual_type(xcb_screen_t *s);
 xcb_pixmap_t create_bg_pixmap(xcb_connection_t *conn, xcb_screen_t *scr, u_int32_t *resolution, char *color);
 xcb_window_t open_fullscreen_window(xcb_connection_t *conn, xcb_screen_t *scr, char *color, xcb_pixmap_t pixmap);
 void grab_pointer_and_keyboard(xcb_connection_t *conn, xcb_screen_t *screen, xcb_cursor_t cursor);
-void dpms_turn_off_screen(xcb_connection_t *conn);
+void dpms_set_mode(xcb_connection_t *conn, xcb_dpms_dpms_mode_t mode);
 xcb_cursor_t create_cursor(xcb_connection_t *conn, xcb_screen_t *screen, xcb_window_t win, int choice);
 
 #endif