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
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;
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
{
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);
+}