mirror of
https://github.com/Relintai/sdl2_frt.git
synced 2024-12-16 11:06:49 +01:00
Fix keymap updating for X11 backend
This commit is contained in:
parent
509228c423
commit
de6d290266
@ -676,6 +676,7 @@ X11_DispatchEvent(_THIS)
|
||||
Display *display;
|
||||
SDL_WindowData *data;
|
||||
XEvent xevent;
|
||||
XkbEvent* xkbEvent;
|
||||
int orig_event_type;
|
||||
KeyCode orig_keycode;
|
||||
XClientMessageEvent m;
|
||||
@ -688,6 +689,7 @@ X11_DispatchEvent(_THIS)
|
||||
|
||||
SDL_zero(xevent); /* valgrind fix. --ryan. */
|
||||
X11_XNextEvent(display, &xevent);
|
||||
xkbEvent = (XkbEvent*) &xevent;
|
||||
|
||||
/* Save the original keycode for dead keys, which are filtered out by
|
||||
the XFilterEvent() call below.
|
||||
@ -768,7 +770,7 @@ X11_DispatchEvent(_THIS)
|
||||
if (SDL_GetKeyboardFocus() != NULL) {
|
||||
X11_ReconcileKeyboardState(_this);
|
||||
}
|
||||
} else if (xevent.type == MappingNotify) {
|
||||
} else if (xevent.type == MappingNotify || xkbEvent->any.xkb_type == XkbStateNotify) {
|
||||
/* Has the keyboard layout changed? */
|
||||
const int request = xevent.xmapping.request;
|
||||
|
||||
|
@ -182,6 +182,7 @@ SDL_X11_SYM(XkbDescPtr,XkbGetMap,(Display* a,unsigned int b,unsigned int c),(a,b
|
||||
SDL_X11_SYM(void,XkbFreeClientMap,(XkbDescPtr a,unsigned int b, Bool c),(a,b,c),)
|
||||
SDL_X11_SYM(void,XkbFreeKeyboard,(XkbDescPtr a,unsigned int b, Bool c),(a,b,c),)
|
||||
SDL_X11_SYM(Bool,XkbSetDetectableAutoRepeat,(Display* a, Bool b, Bool* c),(a,b,c),return)
|
||||
SDL_X11_SYM(Bool,XkbSelectEvents,(Display* a, unsigned int b, unsigned int c, unsigned int d),(a,b,c,d),return)
|
||||
#endif
|
||||
|
||||
#if NeedWidePrototypes
|
||||
|
@ -668,6 +668,8 @@ X11_CreateWindow(_THIS, SDL_Window * window)
|
||||
PropertyChangeMask | StructureNotifyMask |
|
||||
KeymapStateMask | fevent));
|
||||
|
||||
X11_XkbSelectEvents(display, XkbUseCoreKbd, XkbStateNotifyMask, XkbStateNotifyMask);
|
||||
|
||||
X11_XFlush(display);
|
||||
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user