From aa5e31356178de43d42f43f48914a62c25033f4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Camilla=20L=C3=B6wy?= Date: Sun, 5 Jan 2020 14:34:39 +0100 Subject: [PATCH] X11: Fix BadMatch focusing a window on non-EWMH WM When the WM does not support EWMH or there is no WM running, GLFW falls back to XSetInputFocus, which will emit BadMatch if the window is not viewable, which will terminate the program. Bug spotted on IRC. --- README.md | 1 + src/x11_window.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d3cf5da1..51d0c668 100644 --- a/README.md +++ b/README.md @@ -158,6 +158,7 @@ information on what to include when reporting a bug. - [X11] Bugfix: Disabled cursor mode was interrupted by indicator windows - [X11] Bugfix: Monitor physical dimensions could be reported as zero mm - [X11] Bugfix: Window position events were not emitted during resizing (#1613) + - [X11] Bugfix: `glfwFocusWindow` could terminate on older WMs or without a WM - [Wayland] Removed support for `wl_shell` (#1443) - [Wayland] Bugfix: The `GLFW_HAND_CURSOR` shape used the wrong image (#1432) - [Wayland] Bugfix: `CLOCK_MONOTONIC` was not correctly enabled diff --git a/src/x11_window.c b/src/x11_window.c index 8a00b34f..5f174f87 100644 --- a/src/x11_window.c +++ b/src/x11_window.c @@ -2457,7 +2457,7 @@ void _glfwPlatformFocusWindow(_GLFWwindow* window) { if (_glfw.x11.NET_ACTIVE_WINDOW) sendEventToWM(window, _glfw.x11.NET_ACTIVE_WINDOW, 1, 0, 0, 0, 0); - else + else if (_glfwPlatformWindowVisible(window)) { XRaiseWindow(_glfw.x11.display, window->x11.handle); XSetInputFocus(_glfw.x11.display, window->x11.handle,