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

Reply via email to