Compare commits

...

4 Commits

Author SHA1 Message Date
MicroBlock
2e76dc19c1
Merge 9541979be2 into feb2a6b728 2025-07-18 07:14:47 +08: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
MicroBlock
9541979be2
fix: add DWM_BB_ENABLE | DWM_BB_BLURREGION; 2025-02-03 15:35:46 +08:00
MicroBlock
1952a1b363
fix: unable to make window transparent in later win10 versions 2025-02-03 14:59:37 +08:00
3 changed files with 13 additions and 1 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

@ -68,6 +68,9 @@ static DWORD getWindowExStyle(const _GLFWwindow* window)
{
DWORD style = WS_EX_APPWINDOW;
if (_glfw.hints.framebuffer.transparent)
style |= WS_EX_LAYERED;
if (window->monitor || window->floating)
style |= WS_EX_TOPMOST;
@ -377,15 +380,17 @@ static void updateFramebufferTransparency(const _GLFWwindow* window)
if (FAILED(DwmIsCompositionEnabled(&composition)) || !composition)
return;
if (IsWindows8OrGreater() ||
(SUCCEEDED(DwmGetColorizationColor(&color, &opaque)) && !opaque))
{
HRGN region = CreateRectRgn(0, 0, -1, -1);
DWM_BLURBEHIND bb = {0};
bb.dwFlags = DWM_BB_ENABLE | DWM_BB_BLURREGION;
bb.dwFlags = DWM_BB_ENABLE | DWM_BB_BLURREGION;;
bb.hRgnBlur = region;
bb.fEnable = TRUE;
SetLayeredWindowAttributes(window->win32.handle, 0x0030c100, 254, LWA_ALPHA);
DwmEnableBlurBehindWindow(window->win32.handle, &bb);
DeleteObject(region);
}
@ -1290,6 +1295,7 @@ static int createNativeWindow(_GLFWwindow* window,
#else
wc.lpszClassName = L"GLFW30";
#endif
wc.hbrBackground = (HBRUSH)CreateSolidBrush(0x00000000);
// Load user-provided icon if available
wc.hIcon = LoadImageW(GetModuleHandleW(NULL),
L"GLFW_ICON", IMAGE_ICON,

View File

@ -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);