Browse Source

Revert "x11: Avoid excess keymap reconstruction"

Switching between layouts with the same group number (e.g. US to Japanese) were incorrectly filtered out with this change, as it doesn't trigger a MappingNotify event.

This reverts commit 3d42412650119a8e13a016e289e5860c034dde19.
Frank Praznik 10 months ago
parent
commit
a4ceb3a31c
3 changed files with 4 additions and 17 deletions
  1. 1 14
      src/video/x11/SDL_x11events.c
  2. 3 2
      src/video/x11/SDL_x11keyboard.c
  3. 0 1
      src/video/x11/SDL_x11video.h

+ 1 - 14
src/video/x11/SDL_x11events.c

@@ -1131,20 +1131,7 @@ static void X11_DispatchEvent(SDL_VideoDevice *_this, XEvent *xevent)
             printf("window %p: KeymapNotify!\n", data);
 #endif
             if (SDL_GetKeyboardFocus() != NULL) {
-#ifdef SDL_VIDEO_DRIVER_X11_HAS_XKBLOOKUPKEYSYM
-                if (videodata->xkb) {
-                    XkbStateRec state;
-                    X11_XkbGetUpdatedMap(videodata->display, XkbAllClientInfoMask, videodata->xkb);
-
-                    if (X11_XkbGetState(videodata->display, XkbUseCoreKbd, &state) == Success) {
-                        unsigned int group = state.group;
-                        if (group != videodata->xkb_group) {
-                            /* Only rebuild the keymap if the layout has changed. */
-                            X11_UpdateKeymap(_this, SDL_TRUE);
-                        }
-                    }
-                }
-#endif
+                X11_UpdateKeymap(_this, SDL_TRUE);
                 X11_ReconcileKeyboardState(_this);
             }
         } else if (xevent->type == MappingNotify) {

+ 3 - 2
src/video/x11/SDL_x11keyboard.c

@@ -347,6 +347,7 @@ void X11_UpdateKeymap(SDL_VideoDevice *_this, SDL_bool send_event)
     int i;
     SDL_Scancode scancode;
     SDL_Keymap *keymap;
+    unsigned char group = 0;
 
     keymap = SDL_CreateKeymap();
 
@@ -356,7 +357,7 @@ void X11_UpdateKeymap(SDL_VideoDevice *_this, SDL_bool send_event)
         X11_XkbGetUpdatedMap(data->display, XkbAllClientInfoMask, data->xkb);
 
         if (X11_XkbGetState(data->display, XkbUseCoreKbd, &state) == Success) {
-            data->xkb_group = state.group;
+            group = state.group;
         }
     }
 #endif
@@ -371,7 +372,7 @@ void X11_UpdateKeymap(SDL_VideoDevice *_this, SDL_bool send_event)
                 continue;
             }
 
-            KeySym keysym = X11_KeyCodeToSym(_this, i, data->xkb_group, keymod_masks[m].xkb_mask);
+            KeySym keysym = X11_KeyCodeToSym(_this, i, group, keymod_masks[m].xkb_mask);
 
             /* Note: The default SDL scancode table sets this to right alt instead of AltGr/Mode, so handle it separately. */
             if (keysym != XK_ISO_Level3_Shift) {

+ 0 - 1
src/video/x11/SDL_x11video.h

@@ -125,7 +125,6 @@ struct SDL_VideoData
     XkbDescPtr xkb;
 #endif
     int xkb_event;
-    unsigned int xkb_group;
 
     KeyCode filter_code;
     Time filter_time;