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.
dev
Kristian Høgsberg 11 years ago
parent 2bff94e057
commit 239902b323
  1. 8
      clients/simple-egl.c
  2. 8
      clients/simple-shm.c
  3. 8
      clients/window.c
  4. 2
      desktop-shell/shell.c
  5. 2
      protocol/xdg-shell.xml

@ -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,

@ -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>

Loading…
Cancel
Save