mirror of
https://github.com/glfw/glfw.git
synced 2024-11-10 00:51:47 +00:00
X11: Fix IM-duplicated key events leaking through
Fixes #747. Fixes #964.
This commit is contained in:
parent
72d58d7b93
commit
4ff66a7818
@ -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: Window creation on 64-bit would read past top of stack (#951)
|
||||||
- [X11] Bugfix: XDND support had multiple non-conformance issues (#968)
|
- [X11] Bugfix: XDND support had multiple non-conformance issues (#968)
|
||||||
- [X11] Bugfix: The RandR monitor path was disabled despite working RandR (#972)
|
- [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)
|
- [Linux] Bugfix: Event processing did not detect joystick disconnection (#932)
|
||||||
- [Cocoa] Added support for Vulkan window surface creation via
|
- [Cocoa] Added support for Vulkan window surface creation via
|
||||||
[MoltenVK](https://moltengl.com/moltenvk/) (#870)
|
[MoltenVK](https://moltengl.com/moltenvk/) (#870)
|
||||||
|
@ -141,8 +141,7 @@ typedef struct _GLFWwindowX11
|
|||||||
// The last position the cursor was warped to by GLFW
|
// The last position the cursor was warped to by GLFW
|
||||||
int warpCursorPosX, warpCursorPosY;
|
int warpCursorPosX, warpCursorPosY;
|
||||||
|
|
||||||
// The information from the last KeyPress event
|
// The time of the last KeyPress event
|
||||||
unsigned int lastKeyCode;
|
|
||||||
Time lastKeyTime;
|
Time lastKeyTime;
|
||||||
|
|
||||||
} _GLFWwindowX11;
|
} _GLFWwindowX11;
|
||||||
|
@ -992,17 +992,16 @@ static void processEvent(XEvent *event)
|
|||||||
if (window->x11.ic)
|
if (window->x11.ic)
|
||||||
{
|
{
|
||||||
// HACK: Ignore duplicate key press events generated by ibus
|
// HACK: Ignore duplicate key press events generated by ibus
|
||||||
// Corresponding release events are filtered out by the
|
// These have the same timestamp as the original event
|
||||||
// GLFW key repeat logic
|
// Corresponding release events are filtered out
|
||||||
if (window->x11.lastKeyCode != keycode ||
|
// implicitly by the GLFW key repeat logic
|
||||||
window->x11.lastKeyTime != event->xkey.time)
|
if (window->x11.lastKeyTime < event->xkey.time)
|
||||||
{
|
{
|
||||||
if (keycode)
|
if (keycode)
|
||||||
_glfwInputKey(window, key, keycode, GLFW_PRESS, mods);
|
_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)
|
if (!filtered)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user