data-device: notify the compositor about new drag icons
authorAnder Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
Tue, 27 Mar 2012 14:36:35 +0000 (17:36 +0300)
committerKristian Høgsberg <krh@bitplanet.net>
Tue, 27 Mar 2012 20:32:02 +0000 (16:32 -0400)
Let the compositor use a listener to be notified when a new drag icon
is set up.

src/data-device.c
src/wayland-server.c
src/wayland-server.h

index 57f31ca..797fdd7 100644 (file)
@@ -300,6 +300,7 @@ data_device_start_drag(struct wl_client *client, struct wl_resource *resource,
                       struct wl_resource *icon_resource, uint32_t time)
 {
        struct wl_input_device *device = resource->data;
+       struct wl_listener *listener, *tmp;
 
        /* FIXME: Check that client has implicit grab on the origin
         * surface that matches the given time. */
@@ -318,6 +319,10 @@ data_device_start_drag(struct wl_client *client, struct wl_resource *resource,
                device->drag_icon_listener.func = destroy_data_device_icon;
                wl_list_insert(icon_resource->destroy_listener_list.prev,
                               &device->drag_icon_listener.link);
+
+               wl_list_for_each_safe(listener, tmp,
+                                     &device->drag_icon_listener_list, link)
+                       listener->func(listener, icon_resource, time);
        }
 
        wl_input_device_start_pointer_grab(device, &device->drag_grab, time);
index 899c094..07a3964 100644 (file)
@@ -533,6 +533,8 @@ wl_input_device_init(struct wl_input_device *device)
        device->selection_data_source = NULL;
        wl_list_init(&device->selection_listener_list);
 
+       wl_list_init(&device->drag_icon_listener_list);
+
        device->x = 100;
        device->y = 100;
 }
index 78372eb..c9b59bd 100644 (file)
@@ -233,6 +233,7 @@ struct wl_input_device {
        struct wl_pointer_grab drag_grab;
        struct wl_surface *drag_surface;
        struct wl_listener drag_icon_listener;
+       struct wl_list drag_icon_listener_list;
 
        struct wl_data_source *selection_data_source;
        struct wl_listener selection_data_source_listener;