mirror of
https://github.com/glfw/glfw.git
synced 2024-11-22 13:04: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.
(cherry picked from commit 40b5a8a37c
)
This commit is contained in:
parent
1acd67eeb6
commit
dea9914692
@ -1511,14 +1511,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) &&
|
||||||
@ -1536,6 +1533,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