From 59c979a59d35215c4ca29a3c359dc9db2bc99ba4 Mon Sep 17 00:00:00 2001 From: Diogo Diniz Date: Thu, 14 Aug 2025 18:46:45 +0100 Subject: [PATCH] Added suggestions by planetis-m --- src/platforms/rcore_desktop_glfw.c | 43 ++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/src/platforms/rcore_desktop_glfw.c b/src/platforms/rcore_desktop_glfw.c index 81a6a41f3..f903af741 100644 --- a/src/platforms/rcore_desktop_glfw.c +++ b/src/platforms/rcore_desktop_glfw.c @@ -74,17 +74,29 @@ #if defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) #include // Required for: timespec, nanosleep(), select() - POSIX - //#define GLFW_EXPOSE_NATIVE_WAYLAND - #ifdef _GLFW_X11 +#if defined(_GLFW_X11) || defined(_GLFW_WAYLAND) + // Set appropriate expose macros based on available backends + #if defined(_GLFW_X11) #define GLFW_EXPOSE_NATIVE_X11 #define Font X11Font // Hack to fix 'Font' name collision // The definition and references to the X11 Font type will be replaced by 'X11Font' // Works as long as the current file consistently references any X11 Font as X11Font // Since it is never referenced (as of writting), this does not pose an issue - #include "GLFW/glfw3native.h" // Required for: glfwGetX11Window() + #endif + + #if defined(_GLFW_WAYLAND) + #define GLFW_EXPOSE_NATIVE_WAYLAND + #endif + + // Include native header only once, regardless of how many backends are defined + #include "GLFW/glfw3native.h" // Required for: glfwGetX11Window() and glfwGetWaylandWindow() + + // Clean up X11-specific hacks + #if defined(_GLFW_X11) #undef Font // Revert hack and allow normal raylib Font usage #endif #endif +#endif #if defined(__APPLE__) #include // Required for: usleep() @@ -725,11 +737,26 @@ void *GetWindowHandle(void) // NOTE: Returned handle is: void *HWND (windows.h) return glfwGetWin32Window(platform.handle); #endif -#if defined(__linux__) && defined(_GLFW_X11) - // Store the window handle localy and return a pointer to the variable instead - // Reasoning detailed in the declaration of X11WindowHandle - X11WindowHandle = glfwGetX11Window(platform.handle); - return &X11WindowHandle; +#if defined(__linux__) + #if defined(_GLFW_WAYLAND) + #if defined(_GLFW_X11) + int platformID = glfwGetPlatform(); + if (platformID == GLFW_PLATFORM_WAYLAND) { + return glfwGetWaylandWindow(platform.handle); + } + else { + X11WindowHandle = glfwGetX11Window(platform.handle); + return &X11WindowHandle; + } + #else + return glfwGetWaylandWindow(platform.handle); + #endif + #else if defined(_GLFW_X11) + // Store the window handle localy and return a pointer to the variable instead + // Reasoning detailed in the declaration of X11WindowHandle + X11WindowHandle = glfwGetX11Window(platform.handle); + return &X11WindowHandle; + #endif #endif #if defined(__APPLE__) // NOTE: Returned handle is: (objc_object *)