client: Fix shell unstable version check
Use a static assert to catch mismatch between implementation and interface version. Fix window.c to not use XDG_SHELL_VERSION_CURRENT, which will fail to catch version mismatches. The implementation version must updated manually when the implementation is updated to use the new interface.
This commit is contained in:
@@ -717,6 +717,12 @@ static const struct xdg_shell_listener xdg_shell_listener = {
|
|||||||
xdg_shell_ping,
|
xdg_shell_ping,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define XDG_VERSION 2 /* The version of xdg-shell that we implement */
|
||||||
|
#ifdef static_assert
|
||||||
|
static_assert(XDG_VERSION == XDG_SHELL_VERSION_CURRENT,
|
||||||
|
"Interface version doesn't match implementation version");
|
||||||
|
#endif
|
||||||
|
|
||||||
static void
|
static void
|
||||||
registry_handle_global(void *data, struct wl_registry *registry,
|
registry_handle_global(void *data, struct wl_registry *registry,
|
||||||
uint32_t name, const char *interface, uint32_t version)
|
uint32_t name, const char *interface, uint32_t version)
|
||||||
@@ -731,7 +737,7 @@ registry_handle_global(void *data, struct wl_registry *registry,
|
|||||||
d->shell = wl_registry_bind(registry, name,
|
d->shell = wl_registry_bind(registry, name,
|
||||||
&xdg_shell_interface, 1);
|
&xdg_shell_interface, 1);
|
||||||
xdg_shell_add_listener(d->shell, &xdg_shell_listener, d);
|
xdg_shell_add_listener(d->shell, &xdg_shell_listener, d);
|
||||||
xdg_shell_use_unstable_version(d->shell, 1);
|
xdg_shell_use_unstable_version(d->shell, XDG_VERSION);
|
||||||
} else if (strcmp(interface, "wl_seat") == 0) {
|
} else if (strcmp(interface, "wl_seat") == 0) {
|
||||||
d->seat = wl_registry_bind(registry, name,
|
d->seat = wl_registry_bind(registry, name,
|
||||||
&wl_seat_interface, 1);
|
&wl_seat_interface, 1);
|
||||||
|
|||||||
@@ -331,6 +331,12 @@ static const struct xdg_shell_listener xdg_shell_listener = {
|
|||||||
xdg_shell_ping,
|
xdg_shell_ping,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define XDG_VERSION 2 /* The version of xdg-shell that we implement */
|
||||||
|
#ifdef static_assert
|
||||||
|
static_assert(XDG_VERSION == XDG_SHELL_VERSION_CURRENT,
|
||||||
|
"Interface version doesn't match implementation version");
|
||||||
|
#endif
|
||||||
|
|
||||||
static void
|
static void
|
||||||
registry_handle_global(void *data, struct wl_registry *registry,
|
registry_handle_global(void *data, struct wl_registry *registry,
|
||||||
uint32_t id, const char *interface, uint32_t version)
|
uint32_t id, const char *interface, uint32_t version)
|
||||||
@@ -344,7 +350,7 @@ registry_handle_global(void *data, struct wl_registry *registry,
|
|||||||
} else if (strcmp(interface, "xdg_shell") == 0) {
|
} else if (strcmp(interface, "xdg_shell") == 0) {
|
||||||
d->shell = wl_registry_bind(registry,
|
d->shell = wl_registry_bind(registry,
|
||||||
id, &xdg_shell_interface, 1);
|
id, &xdg_shell_interface, 1);
|
||||||
xdg_shell_use_unstable_version(d->shell, 1);
|
xdg_shell_use_unstable_version(d->shell, XDG_VERSION);
|
||||||
xdg_shell_add_listener(d->shell, &xdg_shell_listener, d);
|
xdg_shell_add_listener(d->shell, &xdg_shell_listener, d);
|
||||||
} else if (strcmp(interface, "wl_shm") == 0) {
|
} else if (strcmp(interface, "wl_shm") == 0) {
|
||||||
d->shm = wl_registry_bind(registry,
|
d->shm = wl_registry_bind(registry,
|
||||||
|
|||||||
+7
-1
@@ -5019,6 +5019,12 @@ static const struct xdg_shell_listener xdg_shell_listener = {
|
|||||||
xdg_shell_ping,
|
xdg_shell_ping,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define XDG_VERSION 2 /* The version of xdg-shell that we implement */
|
||||||
|
#ifdef static_assert
|
||||||
|
static_assert(XDG_VERSION == XDG_SHELL_VERSION_CURRENT,
|
||||||
|
"Interface version doesn't match implementation version");
|
||||||
|
#endif
|
||||||
|
|
||||||
static void
|
static void
|
||||||
registry_handle_global(void *data, struct wl_registry *registry, uint32_t id,
|
registry_handle_global(void *data, struct wl_registry *registry, uint32_t id,
|
||||||
const char *interface, uint32_t version)
|
const char *interface, uint32_t version)
|
||||||
@@ -5050,7 +5056,7 @@ registry_handle_global(void *data, struct wl_registry *registry, uint32_t id,
|
|||||||
} else if (strcmp(interface, "xdg_shell") == 0) {
|
} else if (strcmp(interface, "xdg_shell") == 0) {
|
||||||
d->xdg_shell = wl_registry_bind(registry, id,
|
d->xdg_shell = wl_registry_bind(registry, id,
|
||||||
&xdg_shell_interface, 1);
|
&xdg_shell_interface, 1);
|
||||||
xdg_shell_use_unstable_version(d->xdg_shell, XDG_SHELL_VERSION_CURRENT);
|
xdg_shell_use_unstable_version(d->xdg_shell, XDG_VERSION);
|
||||||
xdg_shell_add_listener(d->xdg_shell, &xdg_shell_listener, d);
|
xdg_shell_add_listener(d->xdg_shell, &xdg_shell_listener, d);
|
||||||
} else if (strcmp(interface, "text_cursor_position") == 0) {
|
} else if (strcmp(interface, "text_cursor_position") == 0) {
|
||||||
d->text_cursor_position =
|
d->text_cursor_position =
|
||||||
|
|||||||
@@ -3635,7 +3635,7 @@ xdg_shell_unversioned_dispatch(const void *implementation,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define XDG_SERVER_VERSION 1
|
#define XDG_SERVER_VERSION 2
|
||||||
|
|
||||||
static_assert(XDG_SERVER_VERSION == XDG_SHELL_VERSION_CURRENT,
|
static_assert(XDG_SERVER_VERSION == XDG_SHELL_VERSION_CURRENT,
|
||||||
"shell implementation doesn't match protocol version");
|
"shell implementation doesn't match protocol version");
|
||||||
|
|||||||
@@ -43,7 +43,7 @@
|
|||||||
Use this enum to check the protocol version, and it will be updated
|
Use this enum to check the protocol version, and it will be updated
|
||||||
automatically.
|
automatically.
|
||||||
</description>
|
</description>
|
||||||
<entry name="current" value="1" summary="Always the latest version"/>
|
<entry name="current" value="2" summary="Always the latest version"/>
|
||||||
</enum>
|
</enum>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user