compositor: use new drag icon listener for setting up drag surfaces
authorAnder Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
Tue, 27 Mar 2012 14:36:39 +0000 (17:36 +0300)
committerKristian Høgsberg <krh@bitplanet.net>
Tue, 27 Mar 2012 20:36:53 +0000 (16:36 -0400)
That way we can get rid of the call to
weston_compositor_update_drag_surfaces() on shell->map().

src/compositor.c
src/compositor.h
src/shell.c

index be0e798..5172c70 100644 (file)
@@ -1958,6 +1958,18 @@ bind_input_device(struct wl_client *client,
        resource->destroy = unbind_input_device;
 }
 
+static void
+device_handle_new_drag_icon(struct wl_listener *listener,
+                           struct wl_resource *resource, uint32_t time)
+{
+       struct weston_input_device *device;
+
+       device = container_of(listener, struct weston_input_device,
+                             new_drag_icon_listener);
+
+       weston_input_update_drag_surface(&device->input_device, 0, 0);
+}
+
 WL_EXPORT void
 weston_input_device_init(struct weston_input_device *device,
                         struct weston_compositor *ec)
@@ -1979,6 +1991,10 @@ weston_input_device_init(struct weston_input_device *device,
        device->drag_surface_destroy_listener.func = handle_drag_surface_destroy;
 
        wl_list_insert(ec->input_device_list.prev, &device->link);
+
+       device->new_drag_icon_listener.func = device_handle_new_drag_icon;
+       wl_list_insert(device->input_device.drag_icon_listener_list.prev,
+                      &device->new_drag_icon_listener.link);
 }
 
 WL_EXPORT void
index 58bae0f..d76e99d 100644 (file)
@@ -121,6 +121,8 @@ struct weston_input_device {
        struct wl_listener touch_focus_listener;
        struct wl_resource *touch_focus_resource;
        struct wl_listener touch_focus_resource_listener;
+
+       struct wl_listener new_drag_icon_listener;
 };
 
 struct weston_shader {
index 550184a..e6935ce 100644 (file)
@@ -1555,8 +1555,6 @@ map(struct weston_shell *base, struct weston_surface *surface,
        surface->geometry.height = height;
        surface->geometry.dirty = 1;
 
-       weston_compositor_update_drag_surfaces(compositor);
-
        /* initial positioning, see also configure() */
        switch (surface_type) {
        case SHELL_SURFACE_TOPLEVEL: