From 235b8dc2e44e2c0f66f3bbedaff752704f2138ef Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 6 Apr 2024 10:59:28 +0530 Subject: [PATCH] Assume all capabilities on compositors that dont support reporting of capabilities --- glfw/wl_init.c | 5 +++-- glfw/wl_platform.h | 1 + glfw/wl_window.c | 8 +++++--- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/glfw/wl_init.c b/glfw/wl_init.c index 487ea6dd8..2ad3a00bb 100644 --- a/glfw/wl_init.c +++ b/glfw/wl_init.c @@ -675,10 +675,11 @@ static void registryHandleGlobal(void* data UNUSED, } else if (is(xdg_wm_base)) { + _glfw.wl.xdg_wm_base_version = 1; #ifdef XDG_TOPLEVEL_WM_CAPABILITIES_SINCE_VERSION - version = min(XDG_TOPLEVEL_WM_CAPABILITIES_SINCE_VERSION, version); + _glfw.wl.xdg_wm_base_version = min(XDG_TOPLEVEL_WM_CAPABILITIES_SINCE_VERSION, version); #endif - _glfw.wl.wmBase = wl_registry_bind(registry, name, &xdg_wm_base_interface, version); + _glfw.wl.wmBase = wl_registry_bind(registry, name, &xdg_wm_base_interface, _glfw.wl.xdg_wm_base_version); xdg_wm_base_add_listener(_glfw.wl.wmBase, &wmBaseListener, NULL); } else if (is(zxdg_decoration_manager_v1)) diff --git a/glfw/wl_platform.h b/glfw/wl_platform.h index 8c78828ab..455717d04 100644 --- a/glfw/wl_platform.h +++ b/glfw/wl_platform.h @@ -307,6 +307,7 @@ typedef struct _GLFWlibraryWayland struct wl_data_device_manager* dataDeviceManager; struct wl_data_device* dataDevice; struct xdg_wm_base* wmBase; + int xdg_wm_base_version; struct zxdg_decoration_manager_v1* decorationManager; struct zwp_relative_pointer_manager_v1* relativePointerManager; struct zwp_pointer_constraints_v1* pointerConstraints; diff --git a/glfw/wl_window.c b/glfw/wl_window.c index 420c692ab..32d1ac225 100644 --- a/glfw/wl_window.c +++ b/glfw/wl_window.c @@ -1068,9 +1068,11 @@ create_window_desktop_surface(_GLFWwindow* window) return false; } - xdg_toplevel_add_listener(window->wl.xdg.toplevel, - &xdgToplevelListener, - window); +#ifdef XDG_TOPLEVEL_WM_CAPABILITIES_SINCE_VERSION + if (_glfw.wl.xdg_wm_base_version < XDG_TOPLEVEL_WM_CAPABILITIES_SINCE_VERSION) + memset(&window->wl.wm_capabilities, 0xff, sizeof(window->wl.wm_capabilities)); +#endif + xdg_toplevel_add_listener(window->wl.xdg.toplevel, &xdgToplevelListener, window); if (_glfw.wl.decorationManager) { window->wl.xdg.decoration = zxdg_decoration_manager_v1_get_toplevel_decoration( _glfw.wl.decorationManager, window->wl.xdg.toplevel);