|
|
@ -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); |
|
|
@ -218,6 +221,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); |
|
|
|
} |
|
|
|
|
|
|
|