mirror of
https://github.com/glfw/glfw.git
synced 2024-11-22 04:54:35 +00:00
Wayland: Fix reappearing key repeat
If the key or character callback performs actions that indirectly updates the key repeat timer, those changes would be undone once the key callback returned. This fixes the order of operations so that key repeat is fully set up before the key related events are emitted.
This commit is contained in:
parent
9180923ea0
commit
40b5a8a37c
@ -1466,14 +1466,11 @@ static void keyboardHandleKey(void* userData,
|
|||||||
state == WL_KEYBOARD_KEY_STATE_PRESSED ? GLFW_PRESS : GLFW_RELEASE;
|
state == WL_KEYBOARD_KEY_STATE_PRESSED ? GLFW_PRESS : GLFW_RELEASE;
|
||||||
|
|
||||||
_glfw.wl.serial = serial;
|
_glfw.wl.serial = serial;
|
||||||
_glfwInputKey(window, key, scancode, action, _glfw.wl.xkb.modifiers);
|
|
||||||
|
|
||||||
struct itimerspec timer = {0};
|
struct itimerspec timer = {0};
|
||||||
|
|
||||||
if (action == GLFW_PRESS)
|
if (action == GLFW_PRESS)
|
||||||
{
|
{
|
||||||
inputText(window, scancode);
|
|
||||||
|
|
||||||
const xkb_keycode_t keycode = scancode + 8;
|
const xkb_keycode_t keycode = scancode + 8;
|
||||||
|
|
||||||
if (xkb_keymap_key_repeats(_glfw.wl.xkb.keymap, keycode) &&
|
if (xkb_keymap_key_repeats(_glfw.wl.xkb.keymap, keycode) &&
|
||||||
@ -1491,6 +1488,11 @@ static void keyboardHandleKey(void* userData,
|
|||||||
}
|
}
|
||||||
|
|
||||||
timerfd_settime(_glfw.wl.keyRepeatTimerfd, 0, &timer, NULL);
|
timerfd_settime(_glfw.wl.keyRepeatTimerfd, 0, &timer, NULL);
|
||||||
|
|
||||||
|
_glfwInputKey(window, key, scancode, action, _glfw.wl.xkb.modifiers);
|
||||||
|
|
||||||
|
if (action == GLFW_PRESS)
|
||||||
|
inputText(window, scancode);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void keyboardHandleModifiers(void* userData,
|
static void keyboardHandleModifiers(void* userData,
|
||||||
|
Loading…
Reference in New Issue
Block a user