about summary refs log tree commit diff
path: root/xevents.c
diff options
context:
space:
mode:
Diffstat (limited to 'xevents.c')
-rw-r--r--xevents.c21
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
  */