data-device: Verify that the client has an implicit grab when starting a drag
authorKristian Høgsberg <krh@bitplanet.net>
Wed, 8 May 2013 19:53:42 +0000 (15:53 -0400)
committerKristian Høgsberg <krh@bitplanet.net>
Wed, 8 May 2013 19:58:49 +0000 (15:58 -0400)
Make sure that the implicit is valid and still in effect as we start
the drag.  Fixes a long standing FIXME.

src/data-device.c

index 93c923c..e9c7ed7 100644 (file)
@@ -351,8 +351,10 @@ data_device_start_drag(struct wl_client *client, struct wl_resource *resource,
        struct weston_drag *drag = resource->data;
        struct weston_surface *icon = NULL;
 
-       /* FIXME: Check that client has implicit grab on the origin
-        * surface that matches the given time. */
+       if (seat->pointer->button_count == 0 ||
+           seat->pointer->grab_serial != serial ||
+           seat->pointer->focus != origin_resource->data)
+               return;
 
        /* FIXME: Check that the data source type array isn't empty. */