cmake: Split and store the libdecor version as individual parts
It is becoming necessary to enable additional features as libdecor continues to evolve, and checking against a single base version will no longer be adequate. Libdecor doesn't provide versioning defines in its headers, so split the version string into parts to allow for discrete version detection and feature enablement at build time.
This commit is contained in:
@@ -60,6 +60,13 @@ enum libdecor_window_state;
|
||||
(WAYLAND_VERSION_MAJOR == x && WAYLAND_VERSION_MINOR > y) || \
|
||||
(WAYLAND_VERSION_MAJOR == x && WAYLAND_VERSION_MINOR == y && WAYLAND_VERSION_MICRO >= z))
|
||||
|
||||
#ifdef HAVE_LIBDECOR_H
|
||||
#define SDL_LIBDECOR_CHECK_VERSION(x, y, z) \
|
||||
(SDL_LIBDECOR_VERSION_MAJOR > x || \
|
||||
(SDL_LIBDECOR_VERSION_MAJOR == x && SDL_LIBDECOR_VERSION_MINOR > y) || \
|
||||
(SDL_LIBDECOR_VERSION_MAJOR == x && SDL_LIBDECOR_VERSION_MINOR == y && SDL_LIBDECOR_VERSION_PATCH >= z))
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
@@ -219,7 +219,7 @@ SDL_WAYLAND_SYM(bool, libdecor_configuration_get_window_state, (struct libdecor_
|
||||
enum libdecor_window_state *))
|
||||
SDL_WAYLAND_SYM(int, libdecor_dispatch, (struct libdecor *, int))
|
||||
|
||||
#if defined(SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_LIBDECOR) || defined(SDL_HAVE_LIBDECOR_VER_0_2_0)
|
||||
#if defined(SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_LIBDECOR) || SDL_LIBDECOR_CHECK_VERSION(0, 2, 0)
|
||||
/* Only found in libdecor 0.1.1 or higher, so failure to load them is not fatal. */
|
||||
SDL_WAYLAND_SYM_OPT(void, libdecor_frame_get_min_content_size, (const struct libdecor_frame *,\
|
||||
int *,\
|
||||
|
||||
@@ -945,7 +945,7 @@ static void OverrideLibdecorLimits(SDL_Window *window)
|
||||
if (!libdecor_frame_get_min_content_size) {
|
||||
libdecor_frame_set_min_content_size(window->driverdata->shell_surface.libdecor.frame, window->min_w, window->min_h);
|
||||
}
|
||||
#elif !defined(SDL_HAVE_LIBDECOR_VER_0_2_0)
|
||||
#elif !SDL_LIBDECOR_CHECK_VERSION(0, 2, 0)
|
||||
libdecor_frame_set_min_content_size(window->driverdata->shell_surface.libdecor.frame, window->min_w, window->min_h);
|
||||
#endif
|
||||
}
|
||||
@@ -964,7 +964,7 @@ static void LibdecorGetMinContentSize(struct libdecor_frame *frame, int *min_w,
|
||||
if (libdecor_frame_get_min_content_size != NULL) {
|
||||
libdecor_frame_get_min_content_size(frame, min_w, min_h);
|
||||
}
|
||||
#elif defined(SDL_HAVE_LIBDECOR_VER_0_2_0)
|
||||
#elif SDL_LIBDECOR_CHECK_VERSION(0, 2, 0)
|
||||
libdecor_frame_get_min_content_size(frame, min_w, min_h);
|
||||
#endif
|
||||
}
|
||||
@@ -997,7 +997,7 @@ static void decoration_frame_configure(struct libdecor_frame *frame,
|
||||
maximized = (window_state & LIBDECOR_WINDOW_STATE_MAXIMIZED) != 0;
|
||||
active = (window_state & LIBDECOR_WINDOW_STATE_ACTIVE) != 0;
|
||||
tiled = (window_state & tiled_states) != 0;
|
||||
#ifdef SDL_HAVE_LIBDECOR_VER_0_2_0
|
||||
#if SDL_LIBDECOR_CHECK_VERSION(0, 2, 0)
|
||||
suspended = (window_state & LIBDECOR_WINDOW_STATE_SUSPENDED) != 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user