Commit 737ac0d4 authored by Harish Krupo's avatar Harish Krupo
Browse files

data-device: send INVALID_FINISH when operation != dnd



The documentation of wl_data_offer::finish states that it should be
used to signify that a drag and drop operation is completed. So send
WL_DATA_OFFER_ERROR_INVALID_FINISH when the client calls the finish
request but the operation isn't dnd.
Signed-off-by: Harish Krupo's avatarHarish Krupo <harishkrupo@gmail.com>
parent ee4c7a24
...@@ -427,6 +427,7 @@ struct weston_data_source { ...@@ -427,6 +427,7 @@ struct weston_data_source {
struct weston_seat *seat; struct weston_seat *seat;
bool accepted; bool accepted;
bool actions_set; bool actions_set;
bool set_selection;
uint32_t dnd_actions; uint32_t dnd_actions;
enum wl_data_device_manager_dnd_action current_dnd_action; enum wl_data_device_manager_dnd_action current_dnd_action;
enum wl_data_device_manager_dnd_action compositor_action; enum wl_data_device_manager_dnd_action compositor_action;
......
...@@ -220,6 +220,13 @@ data_offer_finish(struct wl_client *client, struct wl_resource *resource) ...@@ -220,6 +220,13 @@ data_offer_finish(struct wl_client *client, struct wl_resource *resource)
if (!offer->source || offer->source->offer != offer) if (!offer->source || offer->source->offer != offer)
return; return;
if (offer->source->set_selection) {
wl_resource_post_error(offer->resource,
WL_DATA_OFFER_ERROR_INVALID_FINISH,
"finish only valid for drag n drop");
return;
}
/* Disallow finish while we have a grab driving drag-and-drop, or /* Disallow finish while we have a grab driving drag-and-drop, or
* if the negotiation is not at the right stage * if the negotiation is not at the right stage
*/ */
...@@ -1145,6 +1152,7 @@ weston_seat_set_selection(struct weston_seat *seat, ...@@ -1145,6 +1152,7 @@ weston_seat_set_selection(struct weston_seat *seat,
seat->selection_data_source = source; seat->selection_data_source = source;
seat->selection_serial = serial; seat->selection_serial = serial;
source->set_selection = true;
if (keyboard) if (keyboard)
focus = keyboard->focus; focus = keyboard->focus;
...@@ -1267,6 +1275,7 @@ create_data_source(struct wl_client *client, ...@@ -1267,6 +1275,7 @@ create_data_source(struct wl_client *client,
source->dnd_actions = 0; source->dnd_actions = 0;
source->current_dnd_action = WL_DATA_DEVICE_MANAGER_DND_ACTION_NONE; source->current_dnd_action = WL_DATA_DEVICE_MANAGER_DND_ACTION_NONE;
source->compositor_action = WL_DATA_DEVICE_MANAGER_DND_ACTION_NONE; source->compositor_action = WL_DATA_DEVICE_MANAGER_DND_ACTION_NONE;
source->set_selection = false;
wl_array_init(&source->mime_types); wl_array_init(&source->mime_types);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment