Display error message when locking failed (#99)
To give a feedback for when the pointer couldn't be grabbed, displaying an error message before exiting.
This commit is contained in:
parent
1c97a84847
commit
d2130092cf
|
@ -160,6 +160,7 @@ xcb_pixmap_t draw_image(uint32_t *resolution) {
|
||||||
cairo_set_source_rgba(ctx, 0, 114.0 / 255, 255.0 / 255, 0.75);
|
cairo_set_source_rgba(ctx, 0, 114.0 / 255, 255.0 / 255, 0.75);
|
||||||
break;
|
break;
|
||||||
case STATE_PAM_WRONG:
|
case STATE_PAM_WRONG:
|
||||||
|
case STATE_I3LOCK_LOCK_FAILED:
|
||||||
cairo_set_source_rgba(ctx, 250.0 / 255, 0, 0, 0.75);
|
cairo_set_source_rgba(ctx, 250.0 / 255, 0, 0, 0.75);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -174,6 +175,7 @@ xcb_pixmap_t draw_image(uint32_t *resolution) {
|
||||||
cairo_set_source_rgb(ctx, 51.0 / 255, 0, 250.0 / 255);
|
cairo_set_source_rgb(ctx, 51.0 / 255, 0, 250.0 / 255);
|
||||||
break;
|
break;
|
||||||
case STATE_PAM_WRONG:
|
case STATE_PAM_WRONG:
|
||||||
|
case STATE_I3LOCK_LOCK_FAILED:
|
||||||
cairo_set_source_rgb(ctx, 125.0 / 255, 51.0 / 255, 0);
|
cairo_set_source_rgb(ctx, 125.0 / 255, 51.0 / 255, 0);
|
||||||
break;
|
break;
|
||||||
case STATE_PAM_IDLE:
|
case STATE_PAM_IDLE:
|
||||||
|
@ -213,6 +215,9 @@ xcb_pixmap_t draw_image(uint32_t *resolution) {
|
||||||
case STATE_PAM_WRONG:
|
case STATE_PAM_WRONG:
|
||||||
text = "wrong!";
|
text = "wrong!";
|
||||||
break;
|
break;
|
||||||
|
case STATE_I3LOCK_LOCK_FAILED:
|
||||||
|
text = "lock failed!";
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
if (show_failed_attempts && failed_attempts > 0) {
|
if (show_failed_attempts && failed_attempts > 0) {
|
||||||
if (failed_attempts > 999) {
|
if (failed_attempts > 999) {
|
||||||
|
|
|
@ -11,10 +11,11 @@ typedef enum {
|
||||||
} unlock_state_t;
|
} unlock_state_t;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
STATE_PAM_IDLE = 0, /* no PAM interaction at the moment */
|
STATE_PAM_IDLE = 0, /* no PAM interaction at the moment */
|
||||||
STATE_PAM_VERIFY = 1, /* currently verifying the password via PAM */
|
STATE_PAM_VERIFY = 1, /* currently verifying the password via PAM */
|
||||||
STATE_PAM_LOCK = 2, /* currently locking the screen */
|
STATE_PAM_LOCK = 2, /* currently locking the screen */
|
||||||
STATE_PAM_WRONG = 3 /* the password was wrong */
|
STATE_PAM_WRONG = 3, /* the password was wrong */
|
||||||
|
STATE_I3LOCK_LOCK_FAILED = 4 /* i3lock failed to load */
|
||||||
} pam_state_t;
|
} pam_state_t;
|
||||||
|
|
||||||
xcb_pixmap_t draw_image(uint32_t* resolution);
|
xcb_pixmap_t draw_image(uint32_t* resolution);
|
||||||
|
|
12
xcb.c
12
xcb.c
|
@ -23,6 +23,8 @@
|
||||||
#include "cursors.h"
|
#include "cursors.h"
|
||||||
#include "unlock_indicator.h"
|
#include "unlock_indicator.h"
|
||||||
|
|
||||||
|
extern pam_state_t pam_state;
|
||||||
|
|
||||||
xcb_connection_t *conn;
|
xcb_connection_t *conn;
|
||||||
xcb_screen_t *screen;
|
xcb_screen_t *screen;
|
||||||
|
|
||||||
|
@ -160,7 +162,7 @@ xcb_window_t open_fullscreen_window(xcb_connection_t *conn, xcb_screen_t *scr, c
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Repeatedly tries to grab pointer and keyboard (up to 1000 times).
|
* Repeatedly tries to grab pointer and keyboard (up to 10000 times).
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
void grab_pointer_and_keyboard(xcb_connection_t *conn, xcb_screen_t *screen, xcb_cursor_t cursor) {
|
void grab_pointer_and_keyboard(xcb_connection_t *conn, xcb_screen_t *screen, xcb_cursor_t cursor) {
|
||||||
|
@ -233,8 +235,14 @@ void grab_pointer_and_keyboard(xcb_connection_t *conn, xcb_screen_t *screen, xcb
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tries <= 0)
|
/* After trying for 10000 times, i3lock will display an error message
|
||||||
|
* for 2 sec prior to terminate. */
|
||||||
|
if (tries <= 0) {
|
||||||
|
pam_state = STATE_I3LOCK_LOCK_FAILED;
|
||||||
|
redraw_screen();
|
||||||
|
sleep(1);
|
||||||
errx(EXIT_FAILURE, "Cannot grab pointer/keyboard");
|
errx(EXIT_FAILURE, "Cannot grab pointer/keyboard");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
xcb_cursor_t create_cursor(xcb_connection_t *conn, xcb_screen_t *screen, xcb_window_t win, int choice) {
|
xcb_cursor_t create_cursor(xcb_connection_t *conn, xcb_screen_t *screen, xcb_window_t win, int choice) {
|
||||||
|
|
Loading…
Reference in New Issue