Compare commits

...

3 Commits

Author SHA1 Message Date
Yukari Hafner
38b0515185
Merge 15f9e1bea7 into feb2a6b728 2025-07-17 17:29:03 +02:00
Doug Binks
feb2a6b728 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
2025-07-17 17:24:19 +02:00
Yukari Hafner
15f9e1bea7
Check whether locales are the empty string and ignore them if they are.
This fixes a confusing error in compiling the xkb compose table if
LC_ALL, LC_CTYPE, or LANG are set to the empty string.
2025-06-20 22:05:11 +02:00
2 changed files with 9 additions and 3 deletions

View File

@ -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`

View File

@ -1686,11 +1686,11 @@ static void keyboardHandleKeymap(void* userData,
// Look up the preferred locale, falling back to "C" as default.
locale = getenv("LC_ALL");
if (!locale)
if (!locale || strlen(locale) == 0)
locale = getenv("LC_CTYPE");
if (!locale)
if (!locale || strlen(locale) == 0)
locale = getenv("LANG");
if (!locale)
if (!locale || strlen(locale) == 0)
locale = "C";
composeTable =
@ -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);