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.

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.
-- 
2.0.1

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to