6e0037e54d
There were two problems here: - libdecor_frame_get_content_* is not available in LIBDECOR v0.1.0. - These functions aren't exposed by <libdecor.h>, they're only exposed by `libdecor-plugin.h` (intended for plug-ins that implement window decorations). Resolve by storing the last applied size from LIBDECOR for reuse.
150 lines
7.3 KiB
C
150 lines
7.3 KiB
C
/* SPDX-FileCopyrightText: 2022 Blender Authors
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
/** \file
|
|
* \ingroup intern_wayland_dynload
|
|
*
|
|
* Wrapper functions for `<libdecor.h>`.
|
|
*
|
|
* \note Not part of WAYLAND, but used with WAYLAND by GHOST.
|
|
* It follows WAYLAND conventions and is a middle-ware library that depends on `libwayland-client`.
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#ifdef WAYLAND_DYNLOAD_FN
|
|
WAYLAND_DYNLOAD_FN(libdecor_configuration_get_content_size)
|
|
WAYLAND_DYNLOAD_FN(libdecor_configuration_get_window_state)
|
|
WAYLAND_DYNLOAD_FN(libdecor_decorate)
|
|
WAYLAND_DYNLOAD_FN(libdecor_dispatch)
|
|
WAYLAND_DYNLOAD_FN(libdecor_frame_commit)
|
|
WAYLAND_DYNLOAD_FN(libdecor_frame_get_xdg_toplevel)
|
|
WAYLAND_DYNLOAD_FN(libdecor_frame_map)
|
|
WAYLAND_DYNLOAD_FN(libdecor_frame_set_app_id)
|
|
WAYLAND_DYNLOAD_FN(libdecor_frame_set_fullscreen)
|
|
WAYLAND_DYNLOAD_FN(libdecor_frame_set_maximized)
|
|
WAYLAND_DYNLOAD_FN(libdecor_frame_set_min_content_size)
|
|
WAYLAND_DYNLOAD_FN(libdecor_frame_set_minimized)
|
|
WAYLAND_DYNLOAD_FN(libdecor_frame_set_parent)
|
|
WAYLAND_DYNLOAD_FN(libdecor_frame_set_title)
|
|
WAYLAND_DYNLOAD_FN(libdecor_frame_unref)
|
|
WAYLAND_DYNLOAD_FN(libdecor_frame_unset_fullscreen)
|
|
WAYLAND_DYNLOAD_FN(libdecor_frame_unset_maximized)
|
|
WAYLAND_DYNLOAD_FN(libdecor_new)
|
|
WAYLAND_DYNLOAD_FN(libdecor_state_free)
|
|
WAYLAND_DYNLOAD_FN(libdecor_state_new)
|
|
WAYLAND_DYNLOAD_FN(libdecor_unref)
|
|
#elif defined(WAYLAND_DYNLOAD_IFACE)
|
|
/* No interfaces. */
|
|
#else
|
|
|
|
/* Header guard. */
|
|
# if !defined(__WAYLAND_DYNLOAD_LIBDECOR_H__) && !defined(WAYLAND_DYNLOAD_VALIDATE)
|
|
# define __WAYLAND_DYNLOAD_LIBDECOR_H__
|
|
|
|
# ifndef WAYLAND_DYNLOAD_VALIDATE
|
|
# include <libdecor.h>
|
|
extern struct WaylandDynload_Libdecor wayland_dynload_libdecor;
|
|
# endif
|
|
|
|
/* Support validating declarations against the header. */
|
|
# ifndef WAYLAND_DYNLOAD_VALIDATE
|
|
# define WL_DYN_FN(sym) (*sym)
|
|
# else
|
|
# define WL_DYN_FN(sym) (sym)
|
|
# endif
|
|
|
|
# ifndef WAYLAND_DYNLOAD_VALIDATE
|
|
struct WaylandDynload_Libdecor {
|
|
# endif
|
|
|
|
bool WL_DYN_FN(libdecor_configuration_get_content_size)(
|
|
struct libdecor_configuration *configuration,
|
|
struct libdecor_frame *frame,
|
|
int *width,
|
|
int *height);
|
|
bool WL_DYN_FN(libdecor_configuration_get_window_state)(
|
|
struct libdecor_configuration *configuration, enum libdecor_window_state *window_state);
|
|
struct libdecor_frame *WL_DYN_FN(libdecor_decorate)(struct libdecor *context,
|
|
struct wl_surface *surface,
|
|
struct libdecor_frame_interface *iface,
|
|
void *user_data);
|
|
int WL_DYN_FN(libdecor_dispatch)(struct libdecor *context, int timeout);
|
|
void WL_DYN_FN(libdecor_frame_commit)(struct libdecor_frame *frame,
|
|
struct libdecor_state *state,
|
|
struct libdecor_configuration *configuration);
|
|
struct xdg_toplevel *WL_DYN_FN(libdecor_frame_get_xdg_toplevel)(struct libdecor_frame *frame);
|
|
void WL_DYN_FN(libdecor_frame_map)(struct libdecor_frame *frame);
|
|
void WL_DYN_FN(libdecor_frame_set_app_id)(struct libdecor_frame *frame, const char *app_id);
|
|
void WL_DYN_FN(libdecor_frame_set_fullscreen)(struct libdecor_frame *frame,
|
|
struct wl_output *output);
|
|
void WL_DYN_FN(libdecor_frame_set_maximized)(struct libdecor_frame *frame);
|
|
void WL_DYN_FN(libdecor_frame_set_min_content_size)(struct libdecor_frame *frame,
|
|
int content_width,
|
|
int content_height);
|
|
void WL_DYN_FN(libdecor_frame_set_minimized)(struct libdecor_frame *frame);
|
|
void WL_DYN_FN(libdecor_frame_set_parent)(struct libdecor_frame *frame,
|
|
struct libdecor_frame *parent);
|
|
void WL_DYN_FN(libdecor_frame_set_title)(struct libdecor_frame *frame, const char *title);
|
|
void WL_DYN_FN(libdecor_frame_unref)(struct libdecor_frame *frame);
|
|
void WL_DYN_FN(libdecor_frame_unset_fullscreen)(struct libdecor_frame *frame);
|
|
void WL_DYN_FN(libdecor_frame_unset_maximized)(struct libdecor_frame *frame);
|
|
struct libdecor *WL_DYN_FN(libdecor_new)(struct wl_display *display,
|
|
struct libdecor_interface *iface);
|
|
void WL_DYN_FN(libdecor_state_free)(struct libdecor_state *state);
|
|
struct libdecor_state *WL_DYN_FN(libdecor_state_new)(int width, int height);
|
|
void WL_DYN_FN(libdecor_unref)(struct libdecor *context);
|
|
|
|
# ifndef WAYLAND_DYNLOAD_VALIDATE
|
|
};
|
|
# endif
|
|
# undef WL_DYN_FN
|
|
|
|
# ifndef WAYLAND_DYNLOAD_VALIDATE
|
|
# define libdecor_configuration_get_content_size(...) \
|
|
(*wayland_dynload_libdecor.libdecor_configuration_get_content_size)(__VA_ARGS__)
|
|
# define libdecor_configuration_get_window_state(...) \
|
|
(*wayland_dynload_libdecor.libdecor_configuration_get_window_state)(__VA_ARGS__)
|
|
# define libdecor_decorate(...) (*wayland_dynload_libdecor.libdecor_decorate)(__VA_ARGS__)
|
|
# define libdecor_dispatch(...) (*wayland_dynload_libdecor.libdecor_dispatch)(__VA_ARGS__)
|
|
# define libdecor_frame_commit(...) \
|
|
(*wayland_dynload_libdecor.libdecor_frame_commit)(__VA_ARGS__)
|
|
# define libdecor_frame_get_xdg_toplevel(...) \
|
|
(*wayland_dynload_libdecor.libdecor_frame_get_xdg_toplevel)(__VA_ARGS__)
|
|
# define libdecor_frame_map(...) (*wayland_dynload_libdecor.libdecor_frame_map)(__VA_ARGS__)
|
|
# define libdecor_frame_set_app_id(...) \
|
|
(*wayland_dynload_libdecor.libdecor_frame_set_app_id)(__VA_ARGS__)
|
|
# define libdecor_frame_set_fullscreen(...) \
|
|
(*wayland_dynload_libdecor.libdecor_frame_set_fullscreen)(__VA_ARGS__)
|
|
# define libdecor_frame_set_maximized(...) \
|
|
(*wayland_dynload_libdecor.libdecor_frame_set_maximized)(__VA_ARGS__)
|
|
# define libdecor_frame_set_min_content_size(...) \
|
|
(*wayland_dynload_libdecor.libdecor_frame_set_min_content_size)(__VA_ARGS__)
|
|
# define libdecor_frame_set_minimized(...) \
|
|
(*wayland_dynload_libdecor.libdecor_frame_set_minimized)(__VA_ARGS__)
|
|
# define libdecor_frame_set_parent(...) \
|
|
(*wayland_dynload_libdecor.libdecor_frame_set_parent)(__VA_ARGS__)
|
|
# define libdecor_frame_set_title(...) \
|
|
(*wayland_dynload_libdecor.libdecor_frame_set_title)(__VA_ARGS__)
|
|
# define libdecor_frame_unref(...) \
|
|
(*wayland_dynload_libdecor.libdecor_frame_unref)(__VA_ARGS__)
|
|
# define libdecor_frame_unset_fullscreen(...) \
|
|
(*wayland_dynload_libdecor.libdecor_frame_unset_fullscreen)(__VA_ARGS__)
|
|
# define libdecor_frame_unset_maximized(...) \
|
|
(*wayland_dynload_libdecor.libdecor_frame_unset_maximized)(__VA_ARGS__)
|
|
# define libdecor_new(...) (*wayland_dynload_libdecor.libdecor_new)(__VA_ARGS__)
|
|
# define libdecor_state_free(...) (*wayland_dynload_libdecor.libdecor_state_free)(__VA_ARGS__)
|
|
# define libdecor_state_new(...) (*wayland_dynload_libdecor.libdecor_state_new)(__VA_ARGS__)
|
|
# define libdecor_unref(...) (*wayland_dynload_libdecor.libdecor_unref)(__VA_ARGS__)
|
|
|
|
# endif /* !WAYLAND_DYNLOAD_VALIDATE */
|
|
# endif /* !defined(__WAYLAND_DYNLOAD_LIBDECOR_H__) && !defined(WAYLAND_DYNLOAD_VALIDATE) */
|
|
#endif /* !defined(WAYLAND_DYNLOAD_FN) && !defined(WAYLAND_DYNLOAD_IFACE) */
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|