diff --git a/src/wl_init.c b/src/wl_init.c index 9248546e..70c6bdf8 100644 --- a/src/wl_init.c +++ b/src/wl_init.c @@ -329,7 +329,7 @@ static xkb_keysym_t composeSymbol(xkb_keysym_t sym) } #endif -static void inputChar(_GLFWwindow* window, uint32_t key) +static GLFWbool inputChar(_GLFWwindow* window, uint32_t key) { uint32_t code, numSyms; long cp; @@ -354,6 +354,8 @@ static void inputChar(_GLFWwindow* window, uint32_t key) _glfwInputChar(window, cp, mods, plain); } } + + return xkb_keymap_key_repeats(_glfw.wl.xkb.keymap, syms[0]); } static void keyboardHandleKey(void* data, @@ -366,6 +368,7 @@ static void keyboardHandleKey(void* data, int keyCode; int action; _GLFWwindow* window = _glfw.wl.keyboardFocus; + GLFWbool shouldRepeat; struct itimerspec timer = {}; if (!window) @@ -380,9 +383,9 @@ static void keyboardHandleKey(void* data, if (action == GLFW_PRESS) { - inputChar(window, key); + shouldRepeat = inputChar(window, key); - if (_glfw.wl.keyboardRepeatRate > 0) + if (shouldRepeat && _glfw.wl.keyboardRepeatRate > 0) { _glfw.wl.keyboardLastKey = keyCode; _glfw.wl.keyboardLastScancode = key;