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 3d42412650.
This commit is contained in:
Frank Praznik
2024-06-23 22:19:46 -04:00
parent 3d42412650
commit a4ceb3a31c
3 changed files with 4 additions and 17 deletions

View File

@@ -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) {

View File

@@ -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) {

View File

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