X11: Fix IM-duplicated key events leaking through

Fixes #747.
Fixes #964.
This commit is contained in:
Camilla Löwy 2017-03-27 01:19:41 +02:00
parent 72d58d7b93
commit 4ff66a7818
3 changed files with 8 additions and 9 deletions

View File

@ -173,6 +173,7 @@ information on what to include when reporting a bug.
- [X11] Bugfix: Window creation on 64-bit would read past top of stack (#951)
- [X11] Bugfix: XDND support had multiple non-conformance issues (#968)
- [X11] Bugfix: The RandR monitor path was disabled despite working RandR (#972)
- [X11] Bugfix: IM-duplicated key events would leak at low polling rates (#747)
- [Linux] Bugfix: Event processing did not detect joystick disconnection (#932)
- [Cocoa] Added support for Vulkan window surface creation via
[MoltenVK](https://moltengl.com/moltenvk/) (#870)

View File

@ -141,8 +141,7 @@ typedef struct _GLFWwindowX11
// The last position the cursor was warped to by GLFW
int warpCursorPosX, warpCursorPosY;
// The information from the last KeyPress event
unsigned int lastKeyCode;
// The time of the last KeyPress event
Time lastKeyTime;
} _GLFWwindowX11;

View File

@ -992,17 +992,16 @@ static void processEvent(XEvent *event)
if (window->x11.ic)
{
// HACK: Ignore duplicate key press events generated by ibus
// Corresponding release events are filtered out by the
// GLFW key repeat logic
if (window->x11.lastKeyCode != keycode ||
window->x11.lastKeyTime != event->xkey.time)
// These have the same timestamp as the original event
// Corresponding release events are filtered out
// implicitly by the GLFW key repeat logic
if (window->x11.lastKeyTime < event->xkey.time)
{
if (keycode)
_glfwInputKey(window, key, keycode, GLFW_PRESS, mods);
}
window->x11.lastKeyCode = keycode;
window->x11.lastKeyTime = event->xkey.time;
window->x11.lastKeyTime = event->xkey.time;
}
if (!filtered)
{