mirror of
https://gitlab.freedesktop.org/wayland/weston
synced 2024-07-08 20:05:52 +00:00
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 <harishkrupo@gmail.com>
This commit is contained in:
parent
ee4c7a24dd
commit
737ac0d4b3
|
@ -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)
|
||||||
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,
|
||||||
|
|
||||||
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,
|
||||||
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);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user