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 |