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:
Camilla Löwy 2022-07-13 12:54:24 +02:00
parent 1acd67eeb6
commit dea9914692

View File

@ -1511,14 +1511,11 @@ static void keyboardHandleKey(void* userData,
state == WL_KEYBOARD_KEY_STATE_PRESSED ? GLFW_PRESS : GLFW_RELEASE;
_glfw.wl.serial = serial;
_glfwInputKey(window, key, scancode, action, _glfw.wl.xkb.modifiers);
struct itimerspec timer = {0};
if (action == GLFW_PRESS)
{
inputText(window, scancode);
const xkb_keycode_t keycode = scancode + 8;
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);
_glfwInputKey(window, key, scancode, action, _glfw.wl.xkb.modifiers);
if (action == GLFW_PRESS)
inputText(window, scancode);
}
static void keyboardHandleModifiers(void* userData,