From feb2a6b7283cbea73d92410dbddf3cc83dcc957f Mon Sep 17 00:00:00 2001 From: Doug Binks Date: Wed, 16 Jul 2025 14:19:19 +0200 Subject: [PATCH] Wayland: Reset key repeat timer on window destruction Windows with keyboard focus may have an active key repeat timer. This should be reset when the window is closed, or key repeat events could be sent to a NULL window were it not for the quickfix in PR #2732. Fixes #2741 Probably the source of #2727 --- README.md | 1 + src/wl_window.c | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/README.md b/README.md index 718449f5..e7ad5a0c 100644 --- a/README.md +++ b/README.md @@ -132,6 +132,7 @@ information on what to include when reporting a bug. - [Wayland] Bugfix: `glfwInit` would segfault on compositor with no seat (#2517) - [Wayland] Bugfix: A drag entering a non-GLFW surface could cause a segfault - [Wayland] Bugfix: Ignore key repeat events when no window has keyboard focus (#2727) + - [Wayland] Bugfix: Reset key repeat timer when window destroyed (#2741,#2727) - [X11] Bugfix: Running without a WM could trigger an assert (#2593,#2601,#2631) - [Null] Added Vulkan 'window' surface creation via `VK_EXT_headless_surface` - [Null] Added EGL context creation on Mesa via `EGL_MESA_platform_surfaceless` diff --git a/src/wl_window.c b/src/wl_window.c index 6457f31e..01650182 100644 --- a/src/wl_window.c +++ b/src/wl_window.c @@ -2187,7 +2187,12 @@ void _glfwDestroyWindowWayland(_GLFWwindow* window) _glfw.wl.pointerFocus = NULL; if (window == _glfw.wl.keyboardFocus) + { + struct itimerspec timer = {0}; + timerfd_settime(_glfw.wl.keyRepeatTimerfd, 0, &timer, NULL); + _glfw.wl.keyboardFocus = NULL; + } if (window->wl.fractionalScale) wp_fractional_scale_v1_destroy(window->wl.fractionalScale);