Compare commits

...

3 Commits

Author SHA1 Message Date
OlegAckbar
6c9668f035
Merge 305fcbbf94 into feb2a6b728 2025-07-18 05:09:00 +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
OlegAckbar
305fcbbf94
Wayland: unset output for fullscreen set operation 2024-06-24 22:39:43 +03:00
2 changed files with 10 additions and 4 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

@ -503,12 +503,12 @@ static void acquireMonitor(_GLFWwindow* window)
if (window->wl.libdecor.frame)
{
libdecor_frame_set_fullscreen(window->wl.libdecor.frame,
window->monitor->wl.output);
NULL);
}
else if (window->wl.xdg.toplevel)
{
xdg_toplevel_set_fullscreen(window->wl.xdg.toplevel,
window->monitor->wl.output);
NULL);
}
setIdleInhibitor(window, GLFW_TRUE);
@ -849,7 +849,7 @@ static GLFWbool createLibdecorFrame(_GLFWwindow* window)
if (window->monitor)
{
libdecor_frame_set_fullscreen(window->wl.libdecor.frame,
window->monitor->wl.output);
NULL);
setIdleInhibitor(window, GLFW_TRUE);
}
else
@ -942,7 +942,7 @@ static GLFWbool createXdgShellObjects(_GLFWwindow* window)
if (window->monitor)
{
xdg_toplevel_set_fullscreen(window->wl.xdg.toplevel, window->monitor->wl.output);
xdg_toplevel_set_fullscreen(window->wl.xdg.toplevel, NULL);
setIdleInhibitor(window, GLFW_TRUE);
}
else
@ -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);