make 'xdg_decoration' optional

This commit is contained in:
Christian Rauch 2020-02-08 18:16:48 +00:00
parent 62c7af6861
commit 2a60bada77
3 changed files with 18 additions and 0 deletions

View File

@ -833,6 +833,7 @@ static void registryHandleGlobal(void* data,
wl_registry_bind(registry, name, &xdg_wm_base_interface, 1); wl_registry_bind(registry, name, &xdg_wm_base_interface, 1);
xdg_wm_base_add_listener(_glfw.wl.wmBase, &wmBaseListener, NULL); xdg_wm_base_add_listener(_glfw.wl.wmBase, &wmBaseListener, NULL);
} }
#ifdef HAS_PROTO_xdg_decoration
else if (strcmp(interface, "zxdg_decoration_manager_v1") == 0) else if (strcmp(interface, "zxdg_decoration_manager_v1") == 0)
{ {
_glfw.wl.decorationManager = _glfw.wl.decorationManager =
@ -840,6 +841,7 @@ static void registryHandleGlobal(void* data,
&zxdg_decoration_manager_v1_interface, &zxdg_decoration_manager_v1_interface,
1); 1);
} }
#endif
else if (strcmp(interface, "wp_viewporter") == 0) else if (strcmp(interface, "wp_viewporter") == 0)
{ {
_glfw.wl.viewporter = _glfw.wl.viewporter =
@ -1259,8 +1261,10 @@ void _glfwPlatformTerminate(void)
wl_shm_destroy(_glfw.wl.shm); wl_shm_destroy(_glfw.wl.shm);
if (_glfw.wl.viewporter) if (_glfw.wl.viewporter)
wp_viewporter_destroy(_glfw.wl.viewporter); wp_viewporter_destroy(_glfw.wl.viewporter);
#ifdef HAS_PROTO_xdg_decoration
if (_glfw.wl.decorationManager) if (_glfw.wl.decorationManager)
zxdg_decoration_manager_v1_destroy(_glfw.wl.decorationManager); zxdg_decoration_manager_v1_destroy(_glfw.wl.decorationManager);
#endif
if (_glfw.wl.wmBase) if (_glfw.wl.wmBase)
xdg_wm_base_destroy(_glfw.wl.wmBase); xdg_wm_base_destroy(_glfw.wl.wmBase);
if (_glfw.wl.dataSource) if (_glfw.wl.dataSource)

View File

@ -57,7 +57,9 @@ typedef VkBool32 (APIENTRY *PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR
#include "osmesa_context.h" #include "osmesa_context.h"
#include "wayland-xdg-shell-client-protocol.h" #include "wayland-xdg-shell-client-protocol.h"
#ifdef HAS_PROTO_xdg_decoration
#include "wayland-xdg-decoration-client-protocol.h" #include "wayland-xdg-decoration-client-protocol.h"
#endif
#include "wayland-viewporter-client-protocol.h" #include "wayland-viewporter-client-protocol.h"
#include "wayland-relative-pointer-unstable-v1-client-protocol.h" #include "wayland-relative-pointer-unstable-v1-client-protocol.h"
#include "wayland-pointer-constraints-unstable-v1-client-protocol.h" #include "wayland-pointer-constraints-unstable-v1-client-protocol.h"
@ -185,7 +187,9 @@ typedef struct _GLFWwindowWayland
struct { struct {
struct xdg_surface* surface; struct xdg_surface* surface;
struct xdg_toplevel* toplevel; struct xdg_toplevel* toplevel;
#ifdef HAS_PROTO_xdg_decoration
struct zxdg_toplevel_decoration_v1* decoration; struct zxdg_toplevel_decoration_v1* decoration;
#endif
} xdg; } xdg;
_GLFWcursor* currentCursor; _GLFWcursor* currentCursor;
@ -235,7 +239,9 @@ typedef struct _GLFWlibraryWayland
struct wl_data_offer* dataOffer; struct wl_data_offer* dataOffer;
struct wl_data_source* dataSource; struct wl_data_source* dataSource;
struct xdg_wm_base* wmBase; struct xdg_wm_base* wmBase;
#ifdef HAS_PROTO_xdg_decoration
struct zxdg_decoration_manager_v1* decorationManager; struct zxdg_decoration_manager_v1* decorationManager;
#endif
struct wp_viewporter* viewporter; struct wp_viewporter* viewporter;
struct zwp_relative_pointer_manager_v1* relativePointerManager; struct zwp_relative_pointer_manager_v1* relativePointerManager;
struct zwp_pointer_constraints_v1* pointerConstraints; struct zwp_pointer_constraints_v1* pointerConstraints;

View File

@ -265,6 +265,7 @@ static void destroyDecorations(_GLFWwindow* window)
destroyDecoration(&window->wl.decorations.bottom); destroyDecoration(&window->wl.decorations.bottom);
} }
#ifdef HAS_PROTO_xdg_decoration
static void xdgDecorationHandleConfigure(void* data, static void xdgDecorationHandleConfigure(void* data,
struct zxdg_toplevel_decoration_v1* decoration, struct zxdg_toplevel_decoration_v1* decoration,
uint32_t mode) uint32_t mode)
@ -280,6 +281,7 @@ static void xdgDecorationHandleConfigure(void* data,
static const struct zxdg_toplevel_decoration_v1_listener xdgDecorationListener = { static const struct zxdg_toplevel_decoration_v1_listener xdgDecorationListener = {
xdgDecorationHandleConfigure, xdgDecorationHandleConfigure,
}; };
#endif
// Makes the surface considered as XRGB instead of ARGB. // Makes the surface considered as XRGB instead of ARGB.
static void setOpaqueRegion(_GLFWwindow* window) static void setOpaqueRegion(_GLFWwindow* window)
@ -560,6 +562,7 @@ static const struct xdg_surface_listener xdgSurfaceListener = {
static void setXdgDecorations(_GLFWwindow* window) static void setXdgDecorations(_GLFWwindow* window)
{ {
#ifdef HAS_PROTO_xdg_decoration
if (_glfw.wl.decorationManager) if (_glfw.wl.decorationManager)
{ {
window->wl.xdg.decoration = window->wl.xdg.decoration =
@ -573,6 +576,7 @@ static void setXdgDecorations(_GLFWwindow* window)
ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE); ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE);
} }
else else
#endif
{ {
window->wl.decorations.serverSide = GLFW_FALSE; window->wl.decorations.serverSide = GLFW_FALSE;
createDecorations(window); createDecorations(window);
@ -849,8 +853,10 @@ void _glfwPlatformDestroyWindow(_GLFWwindow* window)
window->context.destroy(window); window->context.destroy(window);
destroyDecorations(window); destroyDecorations(window);
#ifdef HAS_PROTO_xdg_decoration
if (window->wl.xdg.decoration) if (window->wl.xdg.decoration)
zxdg_toplevel_decoration_v1_destroy(window->wl.xdg.decoration); zxdg_toplevel_decoration_v1_destroy(window->wl.xdg.decoration);
#endif
if (window->wl.decorations.buffer) if (window->wl.decorations.buffer)
wl_buffer_destroy(window->wl.decorations.buffer); wl_buffer_destroy(window->wl.decorations.buffer);
@ -1055,8 +1061,10 @@ void _glfwPlatformSetWindowMonitor(_GLFWwindow* window,
if (window->wl.xdg.toplevel) if (window->wl.xdg.toplevel)
xdg_toplevel_unset_fullscreen(window->wl.xdg.toplevel); xdg_toplevel_unset_fullscreen(window->wl.xdg.toplevel);
setIdleInhibitor(window, GLFW_FALSE); setIdleInhibitor(window, GLFW_FALSE);
#ifdef HAS_PROTO_xdg_decoration
if (!_glfw.wl.decorationManager) if (!_glfw.wl.decorationManager)
createDecorations(window); createDecorations(window);
#endif
} }
_glfwInputWindowMonitor(window, monitor); _glfwInputWindowMonitor(window, monitor);
} }