[PATCH weston v4] Implement data_device interface destructor

Giulio Camuffo giuliocamuffo at gmail.com
Fri Oct 10 10:57:30 PDT 2014


A could of comments below, the rest looks good to me.


2014-09-23 8:21 GMT+03:00 kabeer khan <kabeer.khan at samsung.com>:
> window : compare version and call appropriate destructor
> data-device : change version of creation of data_device_manager and data_device interfaces

Maybe it would be better to split these two changes in separate commits.

>
> Signed-off-by: kabeer khan <kabeer.khan at samsung.com>
> ---
>  clients/window.c  | 15 ++++++++++-----
>  src/data-device.c | 15 ++++++++++-----
>  2 files changed, 20 insertions(+), 10 deletions(-)
>
> diff --git a/clients/window.c b/clients/window.c
> index e44d65c..5e9a2d4 100644
> --- a/clients/window.c
> +++ b/clients/window.c
> @@ -133,6 +133,7 @@ struct display {
>
>         int has_rgb565;
>         int seat_version;
> +       int data_device_manager_version;
>  };
>
>  struct window_output {
> @@ -5126,9 +5127,12 @@ input_destroy(struct input *input)
>         if (input->selection_offer)
>                 data_offer_destroy(input->selection_offer);
>
> -       if (input->data_device)
> -               wl_data_device_destroy(input->data_device);
> -
> +       if (input->data_device) {
> +               if(input->display->data_device_manager_version >= 2)
> +                       wl_data_device_release(input->data_device);
> +               else
> +                       wl_data_device_destroy(input->data_device);
> +       }
>         if (input->display->seat_version >= 3) {
>                 if (input->pointer)
>                         wl_pointer_release(input->pointer);
> @@ -5212,9 +5216,10 @@ registry_handle_global(void *data, struct wl_registry *registry, uint32_t id,
>                 d->shm = wl_registry_bind(registry, id, &wl_shm_interface, 1);
>                 wl_shm_add_listener(d->shm, &shm_listener, d);
>         } else if (strcmp(interface, "wl_data_device_manager") == 0) {
> +               d->data_device_manager_version = MIN(version, 2);
>                 d->data_device_manager =
> -                       wl_registry_bind(registry, id,
> -                                        &wl_data_device_manager_interface, 1);
> +                       wl_registry_bind(registry, id,
> +                                        &wl_data_device_manager_interface, d->data_device_manager_version);
>         } else if (strcmp(interface, "xdg_shell") == 0) {
>                 d->xdg_shell = wl_registry_bind(registry, id,
>                                                 &xdg_shell_interface, 1);
> diff --git a/src/data-device.c b/src/data-device.c
> index 75fc60c..de6ad2a 100644
> --- a/src/data-device.c
> +++ b/src/data-device.c
> @@ -761,10 +761,16 @@ data_device_set_selection(struct wl_client *client,
>                                   wl_resource_get_user_data(source_resource),
>                                   serial);
>  }
> +static void
> +data_device_release(struct wl_client *client, struct wl_resource *resource)
> +{
> +       wl_resource_destroy(resource);
> +}
>
>  static const struct wl_data_device_interface data_device_interface = {
>         data_device_start_drag,
>         data_device_set_selection,
> +       data_device_release
>  };
>
>  static void
> @@ -844,7 +850,7 @@ get_data_device(struct wl_client *client,
>         struct wl_resource *resource;
>
>         resource = wl_resource_create(client,
> -                                     &wl_data_device_interface, 1, id);
> +                                     &wl_data_device_interface, wl_resource_get_version(manager_resource), id);
>         if (resource == NULL) {
>                 wl_resource_post_no_memory(manager_resource);
>                 return;
> @@ -867,9 +873,8 @@ bind_manager(struct wl_client *client,
>  {
>         struct wl_resource *resource;
>
> -       resource =
> -               wl_resource_create(client,
> -                                  &wl_data_device_manager_interface, 1, id);
> +       resource = wl_resource_create(client,
> +                                     &wl_data_device_manager_interface, version, id);

If i understand it correctly, the version used here should be
MIN(version, 2), since the value of 'version' here is just the one the
client passes to wl_registry.bind.

>         if (resource == NULL) {
>                 wl_client_post_no_memory(client);
>                 return;
> @@ -909,7 +914,7 @@ WL_EXPORT int
>  wl_data_device_manager_init(struct wl_display *display)
>  {
>         if (wl_global_create(display,
> -                            &wl_data_device_manager_interface, 1,
> +                            &wl_data_device_manager_interface, 2,
>                              NULL, bind_manager) == NULL)
>                 return -1;
>
> --
> 2.1.0
>
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel


More information about the wayland-devel mailing list