Skip to content

Commit

Permalink
X11: Call XRefreshKeyboardMapping() when we get various MappingNotify…
Browse files Browse the repository at this point in the history
… events.

According to the Xlib docs, you need to do this or Xlib's internal state gets
out of sync.
  • Loading branch information
icculus committed Jun 30, 2015
1 parent acdb494 commit 20ec137
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 0 deletions.
6 changes: 6 additions & 0 deletions src/video/x11/SDL_x11events.c
Expand Up @@ -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;
Expand Down
1 change: 1 addition & 0 deletions src/video/x11/SDL_x11sym.h
Expand Up @@ -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)
Expand Down

0 comments on commit 20ec137

Please sign in to comment.