This lets a drag target reject a drop.
free(dnd_drag);
}
+static void
+drag_reject(void *data, struct wl_drag *drag)
+{
+ fprintf(stderr, "drop rejected\n");
+}
+
static const struct wl_drag_listener drag_listener = {
drag_target,
- drag_finish
+ drag_finish,
+ drag_reject
};
static void
if (!dnd_offer->drag_type) {
fprintf(stderr, "got 'drop', but no target\n");
- /* FIXME: Should send response so compositor and
- * source knows it's over. Can't send -1 to indicate
- * 'no target' though becauses of the way fd passing
- * currently works. */
+ wl_drag_offer_reject(offer);
return;
}
close(fd);
}
+static void
+drag_offer_reject(struct wl_client *client, struct wl_drag_offer *offer)
+{
+ struct wl_drag *drag = container_of(offer, struct wl_drag, drag_offer);
+
+ wl_client_post_event(drag->source->client, &drag->resource.base,
+ WL_DRAG_REJECT);
+}
+
static const struct wl_drag_offer_interface drag_offer_interface = {
drag_offer_accept,
- drag_offer_receive
+ drag_offer_receive,
+ drag_offer_reject
};
static void
<event name="finish">
<arg name="fd" type="fd"/>
</event>
+
+ <event name="reject"/>
</interface>
<arg name="fd" type="fd"/>
</request>
+ <!-- Called to reject a drop -->
+ <request name="reject"/>
+
<!-- Sent before the pointer_focus event to announce the types
offered. One event per offered mime type. -->
<event name="offer">