window : compare version and call appropriate destructor data-device : change version of creation of data_device_manager and data_device interfaces
Signed-off-by: kabeer khan <kabeer.k...@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 (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@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel