data_deivce: Add dnd implementation to ds_data_source 21/279821/1
authorSeunghun Lee <shiin.lee@samsung.com>
Thu, 11 Aug 2022 02:08:52 +0000 (11:08 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Thu, 18 Aug 2022 07:37:50 +0000 (16:37 +0900)
This adds dnd interface to ds_data_source.

Change-Id: I35f75977396f82774cf350df42d20f44c5903e80

src/data_device.h
src/data_device/data_source.c

index 0295fb3..de09eeb 100644 (file)
@@ -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
index 5f52ad5..198d0c0 100644 (file)
@@ -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);
+}