From daa501d8e5cf5df305f8579622dff31770b47a2b Mon Sep 17 00:00:00 2001 From: Seunghun Lee Date: Thu, 11 Aug 2022 11:08:52 +0900 Subject: [PATCH] data_deivce: Add dnd implementation to ds_data_source This adds dnd interface to ds_data_source. Change-Id: I35f75977396f82774cf350df42d20f44c5903e80 --- src/data_device.h | 18 ++++++++++++++++++ src/data_device/data_source.c | 31 +++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/src/data_device.h b/src/data_device.h index 0295fb3..de09eeb 100644 --- a/src/data_device.h +++ b/src/data_device.h @@ -12,6 +12,11 @@ struct ds_data_source_interface { int32_t fd); void (*accept)(struct ds_data_source *source, uint32_t serial, const char *mime_type); + + void (*dnd_drop)(struct ds_data_source *source); + void (*dnd_finish)(struct ds_data_source *source); + void (*dnd_action)(struct ds_data_source *source, + enum wl_data_device_manager_dnd_action action); }; struct ds_data_source @@ -19,6 +24,9 @@ struct ds_data_source const struct ds_data_source_interface *iface; struct wl_array mime_types; + int32_t actions; + + enum wl_data_device_manager_dnd_action current_dnd_action; struct { struct wl_signal destroy; @@ -35,4 +43,14 @@ void ds_data_source_destroy(struct ds_data_source *source); void ds_data_source_send(struct ds_data_source *source, const char *mime_type, int32_t fd); +void ds_data_source_accept(struct ds_data_source *source, uint32_t serial, + const char *mime_type); + +void ds_data_source_dnd_drop(struct ds_data_source *source); + +void ds_data_source_dnd_finish(struct ds_data_source *source); + +void ds_data_source_dnd_action(struct ds_data_source *source, + enum wl_data_device_manager_dnd_action action); + #endif diff --git a/src/data_device/data_source.c b/src/data_device/data_source.c index 5f52ad5..198d0c0 100644 --- a/src/data_device/data_source.c +++ b/src/data_device/data_source.c @@ -37,3 +37,34 @@ ds_data_source_send(struct ds_data_source *source, const char *mime_type, { source->iface->send(source, mime_type, fd); } + +void +ds_data_source_accept(struct ds_data_source *source, uint32_t serial, + const char *mime_type) +{ + source->accepted = (mime_type != NULL); + if (source->iface->accept) + source->iface->accept(source, serial, mime_type); +} + +void +ds_data_source_dnd_drop(struct ds_data_source *source) +{ + if (source->iface->dnd_drop) + source->iface->dnd_drop(source); +} + +void +ds_data_source_dnd_finish(struct ds_data_source *source) +{ + if (source->iface->dnd_finish) + source->iface->dnd_finish(source); +} + +void +ds_data_source_dnd_action(struct ds_data_source *source, + enum wl_data_device_manager_dnd_action action) +{ + if (source->iface->dnd_action) + source->iface->dnd_action(source, action); +} -- 2.7.4