diff options
Diffstat (limited to 'xevents.c')
-rw-r--r-- | xevents.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/xevents.c b/xevents.c index 0da23d7..274af43 100644 --- a/xevents.c +++ b/xevents.c @@ -375,6 +375,27 @@ xev_handle_shape(struct xevent *xev, XEvent *ee) client_do_shape(cc); } +/* + * Called when the keymap has changed. + * Ungrab all keys, reload keymap and then regrab + */ +void +xev_handle_mapping(struct xevent *xev, XEvent *ee) +{ + XMappingEvent *e = &ee->xmapping; + struct keybinding *kb; + + TAILQ_FOREACH(kb, &Conf.keybindingq, entry) + conf_ungrab(&Conf, kb); + + XRefreshKeyboardMapping(e); + + TAILQ_FOREACH(kb, &Conf.keybindingq, entry) + conf_grab(&Conf, kb); + + xev_register(xev); +} + /* * X Event handling */ |