[PATCH weston] xdg-shell: Make stable
Sjoerd Simons
sjoerd.simons at collabora.co.uk
Mon Jul 21 00:30:29 PDT 2014
Hey Jasper,
On Thu, 2014-07-17 at 17:57 -0400, Jasper St. Pierre wrote:
> We've gone through enough churn of xdg-shell that we're now feeling
> confident enough to commit to this much. Let's do it.
It would make me much more confident if the somewhat odd life-time rules
of xdg-shell were addressed before declaring the interface stable. We've
previously discussed this on IRC, see also my mail from last month about
the same subject[0].
0: http://lists.freedesktop.org/archives/wayland-devel/2014-June/015408.html
> The major version number is bumped to 2 because unfortunately we need to
> remove the use_unstable_version API.
> ---
> clients/simple-damage.c | 9 +------
> clients/simple-egl.c | 9 +------
> clients/simple-shm.c | 9 +------
> clients/window.c | 9 +------
> desktop-shell/shell.c | 67 +++++++------------------------------------------
> protocol/xdg-shell.xml | 24 +-----------------
> 6 files changed, 14 insertions(+), 113 deletions(-)
>
> diff --git a/clients/simple-damage.c b/clients/simple-damage.c
> index d7a7c70..222808a 100644
> --- a/clients/simple-damage.c
> +++ b/clients/simple-damage.c
> @@ -642,12 +642,6 @@ static const struct xdg_shell_listener xdg_shell_listener = {
> xdg_shell_ping,
> };
>
> -#define XDG_VERSION 3 /* 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
> registry_handle_global(void *data, struct wl_registry *registry,
> uint32_t id, const char *interface, uint32_t version)
> @@ -673,8 +667,7 @@ registry_handle_global(void *data, struct wl_registry *registry,
> id, &wl_scaler_interface, 2);
> } else if (strcmp(interface, "xdg_shell") == 0) {
> d->shell = wl_registry_bind(registry,
> - id, &xdg_shell_interface, 1);
> - xdg_shell_use_unstable_version(d->shell, XDG_VERSION);
> + id, &xdg_shell_interface, 2);
> xdg_shell_add_listener(d->shell, &xdg_shell_listener, d);
> } else if (strcmp(interface, "_wl_fullscreen_shell") == 0) {
> d->fshell = wl_registry_bind(registry,
> diff --git a/clients/simple-egl.c b/clients/simple-egl.c
> index 2097b4c..adb51a9 100644
> --- a/clients/simple-egl.c
> +++ b/clients/simple-egl.c
> @@ -676,12 +676,6 @@ static const struct xdg_shell_listener xdg_shell_listener = {
> xdg_shell_ping,
> };
>
> -#define XDG_VERSION 3 /* 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
> registry_handle_global(void *data, struct wl_registry *registry,
> uint32_t name, const char *interface, uint32_t version)
> @@ -694,9 +688,8 @@ registry_handle_global(void *data, struct wl_registry *registry,
> &wl_compositor_interface, 1);
> } else if (strcmp(interface, "xdg_shell") == 0) {
> d->shell = wl_registry_bind(registry, name,
> - &xdg_shell_interface, 1);
> + &xdg_shell_interface, 2);
> xdg_shell_add_listener(d->shell, &xdg_shell_listener, d);
> - xdg_shell_use_unstable_version(d->shell, XDG_VERSION);
> } else if (strcmp(interface, "wl_seat") == 0) {
> d->seat = wl_registry_bind(registry, name,
> &wl_seat_interface, 1);
> diff --git a/clients/simple-shm.c b/clients/simple-shm.c
> index 29abb8b..d3dd2f9 100644
> --- a/clients/simple-shm.c
> +++ b/clients/simple-shm.c
> @@ -321,12 +321,6 @@ static const struct xdg_shell_listener xdg_shell_listener = {
> xdg_shell_ping,
> };
>
> -#define XDG_VERSION 3 /* 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
> registry_handle_global(void *data, struct wl_registry *registry,
> uint32_t id, const char *interface, uint32_t version)
> @@ -339,8 +333,7 @@ registry_handle_global(void *data, struct wl_registry *registry,
> id, &wl_compositor_interface, 1);
> } else if (strcmp(interface, "xdg_shell") == 0) {
> d->shell = wl_registry_bind(registry,
> - id, &xdg_shell_interface, 1);
> - xdg_shell_use_unstable_version(d->shell, XDG_VERSION);
> + id, &xdg_shell_interface, 2);
> xdg_shell_add_listener(d->shell, &xdg_shell_listener, d);
> } else if (strcmp(interface, "_wl_fullscreen_shell") == 0) {
> d->fshell = wl_registry_bind(registry,
> diff --git a/clients/window.c b/clients/window.c
> index 1700cf9..1893a6d 100644
> --- a/clients/window.c
> +++ b/clients/window.c
> @@ -5064,12 +5064,6 @@ static const struct xdg_shell_listener xdg_shell_listener = {
> xdg_shell_ping,
> };
>
> -#define XDG_VERSION 3 /* 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
> registry_handle_global(void *data, struct wl_registry *registry, uint32_t id,
> const char *interface, uint32_t version)
> @@ -5100,8 +5094,7 @@ registry_handle_global(void *data, struct wl_registry *registry, uint32_t id,
> &wl_data_device_manager_interface, 1);
> } else if (strcmp(interface, "xdg_shell") == 0) {
> d->xdg_shell = wl_registry_bind(registry, id,
> - &xdg_shell_interface, 1);
> - xdg_shell_use_unstable_version(d->xdg_shell, XDG_VERSION);
> + &xdg_shell_interface, 2);
> xdg_shell_add_listener(d->xdg_shell, &xdg_shell_listener, d);
> } else if (strcmp(interface, "text_cursor_position") == 0) {
> d->text_cursor_position =
> diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c
> index 593c7f3..86bf39f 100644
> --- a/desktop-shell/shell.c
> +++ b/desktop-shell/shell.c
> @@ -3591,19 +3591,6 @@ static const struct weston_shell_client xdg_client = {
> xdg_send_configure
> };
>
> -static void
> -xdg_use_unstable_version(struct wl_client *client,
> - struct wl_resource *resource,
> - int32_t version)
> -{
> - if (version > 1) {
> - wl_resource_post_error(resource,
> - 1,
> - "xdg-shell:: version not implemented yet.");
> - return;
> - }
> -}
> -
> static struct shell_surface *
> create_xdg_surface(struct shell_client *owner, void *shell,
> struct weston_surface *surface,
> @@ -3775,48 +3762,11 @@ shell_surface_is_xdg_popup(struct shell_surface *shsurf)
> }
>
> static const struct xdg_shell_interface xdg_implementation = {
> - xdg_use_unstable_version,
> xdg_get_xdg_surface,
> xdg_get_xdg_popup,
> xdg_pong
> };
>
> -static int
> -xdg_shell_unversioned_dispatch(const void *implementation,
> - void *_target, uint32_t opcode,
> - const struct wl_message *message,
> - union wl_argument *args)
> -{
> - struct wl_resource *resource = _target;
> - struct shell_client *sc = wl_resource_get_user_data(resource);
> -
> - if (opcode != 0) {
> - wl_resource_post_error(resource,
> - WL_DISPLAY_ERROR_INVALID_OBJECT,
> - "must call use_unstable_version first");
> - return 0;
> - }
> -
> -#define XDG_SERVER_VERSION 3
> -
> - static_assert(XDG_SERVER_VERSION == XDG_SHELL_VERSION_CURRENT,
> - "shell implementation doesn't match protocol version");
> -
> - if (args[0].i != XDG_SERVER_VERSION) {
> - wl_resource_post_error(resource,
> - WL_DISPLAY_ERROR_INVALID_OBJECT,
> - "incompatible version, server is %d "
> - "client wants %d",
> - XDG_SERVER_VERSION, args[0].i);
> - return 0;
> - }
> -
> - wl_resource_set_implementation(resource, &xdg_implementation,
> - sc, NULL);
> -
> - return 1;
> -}
> -
> /* end of xdg-shell implementation */
> /***********************************/
>
> @@ -5254,7 +5204,8 @@ handle_shell_client_destroy(struct wl_listener *listener, void *data)
>
> static struct shell_client *
> shell_client_create(struct wl_client *client, struct desktop_shell *shell,
> - const struct wl_interface *interface, uint32_t id)
> + const struct wl_interface *interface, uint32_t id,
> + uint32_t version)
> {
> struct shell_client *sc;
>
> @@ -5264,7 +5215,7 @@ shell_client_create(struct wl_client *client, struct desktop_shell *shell,
> return NULL;
> }
>
> - sc->resource = wl_resource_create(client, interface, 1, id);
> + sc->resource = wl_resource_create(client, interface, version, id);
> if (sc->resource == NULL) {
> free(sc);
> wl_client_post_no_memory(client);
> @@ -5285,7 +5236,7 @@ bind_shell(struct wl_client *client, void *data, uint32_t version, uint32_t id)
> struct desktop_shell *shell = data;
> struct shell_client *sc;
>
> - sc = shell_client_create(client, shell, &wl_shell_interface, id);
> + sc = shell_client_create(client, shell, &wl_shell_interface, id, 1);
> if (sc)
> wl_resource_set_implementation(sc->resource,
> &shell_implementation,
> @@ -5298,11 +5249,11 @@ bind_xdg_shell(struct wl_client *client, void *data, uint32_t version, uint32_t
> struct desktop_shell *shell = data;
> struct shell_client *sc;
>
> - sc = shell_client_create(client, shell, &xdg_shell_interface, id);
> + sc = shell_client_create(client, shell, &xdg_shell_interface, id, 2);
> if (sc)
> - wl_resource_set_dispatcher(sc->resource,
> - xdg_shell_unversioned_dispatch,
> - NULL, sc, NULL);
> + wl_resource_set_implementation(sc->resource,
> + &xdg_implementation,
> + sc, NULL);
> }
>
> static void
> @@ -6241,7 +6192,7 @@ module_init(struct weston_compositor *ec,
> shell, bind_shell) == NULL)
> return -1;
>
> - if (wl_global_create(ec->wl_display, &xdg_shell_interface, 1,
> + if (wl_global_create(ec->wl_display, &xdg_shell_interface, 2,
> shell, bind_xdg_shell) == NULL)
> return -1;
>
> diff --git a/protocol/xdg-shell.xml b/protocol/xdg-shell.xml
> index bd36231..d5c4682 100644
> --- a/protocol/xdg-shell.xml
> +++ b/protocol/xdg-shell.xml
> @@ -29,7 +29,7 @@
> THIS SOFTWARE.
> </copyright>
>
> - <interface name="xdg_shell" version="1">
> + <interface name="xdg_shell" version="2">
> <description summary="create desktop-style surfaces">
> This interface is implemented by servers that provide
> desktop-style user interfaces.
> @@ -38,28 +38,6 @@
> a basic surface.
> </description>
>
> - <enum name="version">
> - <description summary="latest protocol version">
> - The 'current' member of this enum gives the version of the
> - protocol. Implementations can compare this to the version
> - they implement using static_assert to ensure the protocol and
> - implementation versions match.
> - </description>
> - <entry name="current" value="3" summary="Always the latest version"/>
> - </enum>
> -
> -
> - <request name="use_unstable_version">
> - <description summary="enable use of this unstable version">
> - Negotiate the unstable version of the interface. This
> - mechanism is in place to ensure client and server agree on the
> - unstable versions of the protocol that they speak or exit
> - cleanly if they don't agree. This request will go away once
> - the xdg-shell protocol is stable.
> - </description>
> - <arg name="version" type="int"/>
> - </request>
> -
> <request name="get_xdg_surface">
> <description summary="create a shell surface from a surface">
> Create a shell surface for an existing surface.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 6170 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/wayland-devel/attachments/20140721/9947703b/attachment-0001.bin>
More information about the wayland-devel
mailing list