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. */