data-device: Verify that the client has an implicit grab when starting a drag
Make sure that the implicit is valid and still in effect as we start
the drag. Fixes a long standing FIXME.
diff --git a/src/data-device.c b/src/data-device.c
index 93c923c..e9c7ed7 100644
--- a/src/data-device.c
+++ b/src/data-device.c
@@ -351,8 +351,10 @@
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. */