X11: Don't ignore keyboard mapping changes. MappingNotify events don't have a window associated with them, so SDL was dropping these before the point where we would have handled them.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
diff --git a/src/video/x11/SDL_x11events.c b/src/video/x11/SDL_x11events.c
index dfcdf7d..e826c4b 100644
--- a/src/video/x11/SDL_x11events.c
+++ b/src/video/x11/SDL_x11events.c
@@ -642,11 +642,17 @@ X11_DispatchEvent(_THIS)
}
}
if (!data) {
- /* The window for KeymapNotify events is 0 */
+ /* The window for KeymapNotify, etc events is 0 */
if (xevent.type == KeymapNotify) {
if (SDL_GetKeyboardFocus() != NULL) {
X11_ReconcileKeyboardState(_this);
}
+ } else if (xevent.type == MappingNotify) {
+ /* Has the keyboard layout changed? */
+#ifdef DEBUG_XEVENTS
+ printf("window %p: MappingNotify!\n", data);
+#endif
+ X11_UpdateKeymap(_this);
}
return;
}
@@ -762,15 +768,6 @@ X11_DispatchEvent(_THIS)
}
break;
- /* Has the keyboard layout changed? */
- case MappingNotify:{
-#ifdef DEBUG_XEVENTS
- printf("window %p: MappingNotify!\n", data);
-#endif
- X11_UpdateKeymap(_this);
- }
- break;
-
/* Key press? */
case KeyPress:{
KeyCode keycode = xevent.xkey.keycode;