mirror of
https://github.com/libsdl-org/SDL.git
synced 2026-04-04 06:39:31 +00:00
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:
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -125,7 +125,6 @@ struct SDL_VideoData
|
||||
XkbDescPtr xkb;
|
||||
#endif
|
||||
int xkb_event;
|
||||
unsigned int xkb_group;
|
||||
|
||||
KeyCode filter_code;
|
||||
Time filter_time;
|
||||
|
||||
Reference in New Issue
Block a user