diff options
author | Michael Stapelberg <michael@stapelberg.de> | 2011-03-13 19:31:08 +0100 |
---|---|---|
committer | Michael Stapelberg <michael@stapelberg.de> | 2011-03-13 19:31:08 +0100 |
commit | c14cb4a250d1b4ad63a741d4868ad7f06ff4bd3f (patch) | |
tree | 775abd83fac6a246f0d5a6a1b7e12b1671848ed2 /i3lock.c | |
parent | a93f1105842eb1fa64587da36a92c7d17fffa3bd (diff) |
Handle MappingNotify-events (Thanks Pascal)
Diffstat (limited to 'i3lock.c')
-rw-r--r-- | i3lock.c | 28 |
1 files changed, 27 insertions, 1 deletions
@@ -34,6 +34,7 @@ #include "cursors.h" static xcb_connection_t *conn; +static xcb_cursor_t cursor; static xcb_key_symbols_t *symbols; static xcb_screen_t *scr; static pam_handle_t *pam_handle; @@ -61,6 +62,8 @@ static void input_done() { exit(0); } + fprintf(stderr, "Authentication failure\n"); + /* beep on authentication failure, if enabled */ if (beep) { xcb_bell(conn, 100); @@ -219,6 +222,25 @@ void handle_visibility_notify(xcb_visibility_notify_event_t *event) { } /* + * Called when the keyboard mapping changes. We update our symbols and re-grab + * pointer/keyboard. + * + */ +void handle_mapping_notify(xcb_mapping_notify_event_t *event) { + printf("mapping notify\n"); + xcb_refresh_keyboard_mapping(symbols, event); + + xcb_ungrab_pointer(conn, XCB_CURRENT_TIME); + xcb_ungrab_keyboard(conn, XCB_CURRENT_TIME); + grab_pointer_and_keyboard(conn, scr, cursor); + + modeswitchmask = get_mod_mask(conn, symbols, XK_Mode_switch); + numlockmask = get_mod_mask(conn, symbols, XK_Num_Lock); + + xcb_flush(conn); +} + +/* * Callback function for PAM. We only react on password request callbacks. * */ @@ -264,7 +286,6 @@ int main(int argc, char *argv[]) { xcb_visualtype_t *vistype; xcb_generic_event_t *event; xcb_window_t win; - xcb_cursor_t cursor; int curs_choice = CURS_NONE; char o; int optind = 0; @@ -436,6 +457,11 @@ int main(int argc, char *argv[]) { continue; } + if (type == XCB_MAPPING_NOTIFY) { + handle_mapping_notify((xcb_mapping_notify_event_t*)event); + continue; + } + printf("WARNING: unhandled event of type %d\n", type); } |