mirror of https://github.com/encounter/SDL.git
Fixed issue with dead key press/release events being filtered out.
This commit is contained in:
parent
0d39d09076
commit
9228c84576
|
@ -280,19 +280,39 @@ X11_DispatchEvent(_THIS)
|
||||||
Display *display = videodata->display;
|
Display *display = videodata->display;
|
||||||
SDL_WindowData *data;
|
SDL_WindowData *data;
|
||||||
XEvent xevent;
|
XEvent xevent;
|
||||||
int i;
|
int orig_event_type;
|
||||||
|
KeyCode orig_keycode;
|
||||||
XClientMessageEvent m;
|
XClientMessageEvent m;
|
||||||
|
int i;
|
||||||
|
|
||||||
SDL_zero(xevent); /* valgrind fix. --ryan. */
|
SDL_zero(xevent); /* valgrind fix. --ryan. */
|
||||||
X11_XNextEvent(display, &xevent);
|
X11_XNextEvent(display, &xevent);
|
||||||
|
|
||||||
/* filter events catchs XIM events and sends them to the correct
|
/* Save the original keycode for dead keys, which are filtered out by
|
||||||
handler */
|
the XFilterEvent() call below.
|
||||||
|
*/
|
||||||
|
orig_event_type = xevent.type;
|
||||||
|
if (orig_event_type == KeyPress || orig_event_type == KeyRelease) {
|
||||||
|
orig_keycode = xevent.xkey.keycode;
|
||||||
|
} else {
|
||||||
|
orig_keycode = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* filter events catchs XIM events and sends them to the correct handler */
|
||||||
if (X11_XFilterEvent(&xevent, None) == True) {
|
if (X11_XFilterEvent(&xevent, None) == True) {
|
||||||
#if 0
|
#if 0
|
||||||
printf("Filtered event type = %d display = %d window = %d\n",
|
printf("Filtered event type = %d display = %d window = %d\n",
|
||||||
xevent.type, xevent.xany.display, xevent.xany.window);
|
xevent.type, xevent.xany.display, xevent.xany.window);
|
||||||
#endif
|
#endif
|
||||||
|
if (orig_keycode) {
|
||||||
|
/* Make sure dead key press/release events are sent */
|
||||||
|
SDL_Scancode scancode = videodata->key_layout[orig_keycode];
|
||||||
|
if (orig_event_type == KeyPress) {
|
||||||
|
SDL_SendKeyboardKey(SDL_PRESSED, scancode);
|
||||||
|
} else {
|
||||||
|
SDL_SendKeyboardKey(SDL_RELEASED, scancode);
|
||||||
|
}
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue