Просмотр исходного кода

Merge pull request #5111 from didas72/master

Adds more filters for conditional build of GetWindowHandle with GLFW
Ray 1 месяц назад
Родитель
Сommit
81615a91a6
1 измененных файлов с 40 добавлено и 10 удалено
  1. 40 10
      src/platforms/rcore_desktop_glfw.c

+ 40 - 10
src/platforms/rcore_desktop_glfw.c

@@ -74,14 +74,27 @@
 #if defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__)
     #include <sys/time.h>               // Required for: timespec, nanosleep(), select() - POSIX
 
-    //#define GLFW_EXPOSE_NATIVE_WAYLAND
-    #define GLFW_EXPOSE_NATIVE_X11
-    #define Font X11Font                // Hack to fix 'Font' name collision
+#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()
-    #undef Font                         // Revert hack and allow normal raylib Font usage
+    #endif
+    
+    #if defined(_GLFW_WAYLAND)
+        #define GLFW_EXPOSE_NATIVE_WAYLAND
+    #endif
+                                        
+    #include "GLFW/glfw3native.h"       // Include native header only once, regardless of how many backends are defined
+                                        // Required for: glfwGetX11Window() and glfwGetWaylandWindow()
+    
+    #if defined(_GLFW_X11)              // Clean up X11-specific hacks
+        #undef Font                     // Revert hack and allow normal raylib Font usage
+    #endif
+#endif
 #endif
 #if defined(__APPLE__)
     #include <unistd.h>                 // Required for: usleep()
@@ -710,7 +723,7 @@ void SetWindowFocused(void)
     glfwFocusWindow(platform.handle);
 }
 
-#if defined(__linux__)
+#if defined(__linux__) && defined(_GLFW_X11)
 // Local storage for the window handle returned by glfwGetX11Window
 // This is needed as X11 handles are integers and may not fit inside a pointer depending on platform
 // Storing the handle locally and returning a pointer in GetWindowHandle allows the code to work regardless of pointer width
@@ -724,10 +737,27 @@ void *GetWindowHandle(void)
     return glfwGetWin32Window(platform.handle);
 #endif
 #if defined(__linux__)
-    // 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(_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
+    #elif 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 *)