X11: Call XRefreshKeyboardMapping() when we get various MappingNotify events.
According to the Xlib docs, you need to do this or Xlib's internal state gets out of sync.
This commit is contained in:
parent
1361eae8c4
commit
97c1a0ef23
2 changed files with 7 additions and 0 deletions
|
@ -649,9 +649,15 @@ X11_DispatchEvent(_THIS)
|
|||
}
|
||||
} else if (xevent.type == MappingNotify) {
|
||||
/* Has the keyboard layout changed? */
|
||||
const int request = xevent.xmapping.request;
|
||||
|
||||
#ifdef DEBUG_XEVENTS
|
||||
printf("window %p: MappingNotify!\n", data);
|
||||
#endif
|
||||
if ((request == MappingKeyboard) || (request == MappingModifier)) {
|
||||
X11_XRefreshKeyboardMapping(&xevent.xmapping);
|
||||
}
|
||||
|
||||
X11_UpdateKeymap(_this);
|
||||
}
|
||||
return;
|
||||
|
|
|
@ -152,6 +152,7 @@ SDL_X11_SYM(unsigned long,_XSetLastRequestRead,(Display* a,xGenericReply* b),(a,
|
|||
SDL_X11_SYM(SDL_X11_XSynchronizeRetType,XSynchronize,(Display* a,Bool b),(a,b),return)
|
||||
SDL_X11_SYM(SDL_X11_XESetWireToEventRetType,XESetWireToEvent,(Display* a,int b,SDL_X11_XESetWireToEventRetType c),(a,b,c),return)
|
||||
SDL_X11_SYM(SDL_X11_XESetEventToWireRetType,XESetEventToWire,(Display* a,int b,SDL_X11_XESetEventToWireRetType c),(a,b,c),return)
|
||||
SDL_X11_SYM(void,XRefreshKeyboardMapping,(XMappingEvent *a),(a),)
|
||||
|
||||
#if SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS
|
||||
SDL_X11_SYM(Bool,XGetEventData,(Display* a,XGenericEventCookie* b),(a,b),return)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue