|
@@ -74,14 +74,27 @@
|
|
#if defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__)
|
|
#if defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__)
|
|
#include <sys/time.h> // Required for: timespec, nanosleep(), select() - POSIX
|
|
#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'
|
|
// 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
|
|
// 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
|
|
// 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
|
|
#endif
|
|
#if defined(__APPLE__)
|
|
#if defined(__APPLE__)
|
|
#include <unistd.h> // Required for: usleep()
|
|
#include <unistd.h> // Required for: usleep()
|
|
@@ -710,7 +723,7 @@ void SetWindowFocused(void)
|
|
glfwFocusWindow(platform.handle);
|
|
glfwFocusWindow(platform.handle);
|
|
}
|
|
}
|
|
|
|
|
|
-#if defined(__linux__)
|
|
|
|
|
|
+#if defined(__linux__) && defined(_GLFW_X11)
|
|
// Local storage for the window handle returned by glfwGetX11Window
|
|
// 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
|
|
// 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
|
|
// 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);
|
|
return glfwGetWin32Window(platform.handle);
|
|
#endif
|
|
#endif
|
|
#if defined(__linux__)
|
|
#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
|
|
#endif
|
|
#if defined(__APPLE__)
|
|
#if defined(__APPLE__)
|
|
// NOTE: Returned handle is: (objc_object *)
|
|
// NOTE: Returned handle is: (objc_object *)
|