e_dnd: Add e_drag_end variable for drag cancel 12/297912/1 accepted/tizen/unified/20230829.181405
authorJunseok Kim <juns.kim@samsung.com>
Thu, 10 Aug 2023 09:07:36 +0000 (18:07 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Mon, 28 Aug 2023 10:33:53 +0000 (19:33 +0900)
Change-Id: Ie88cda09524b707f02b2f986187f716e88229f2e

src/bin/e_comp_wl_data.c
src/bin/e_dnd.c
src/bin/e_dnd.h
src/bin/services/e_service_kvm.c

index bcc1903..866bef2 100644 (file)
@@ -654,7 +654,7 @@ _e_comp_wl_data_device_selection_set(void *data EINA_UNUSED, E_Comp_Wl_Data_Sour
 }
 
 static void
-_e_comp_wl_data_device_drag_finished(E_Drag *drag)
+_e_comp_wl_data_device_drag_finished(E_Drag *drag, E_Dnd_Drop_Type type)
 {
    Evas_Object *o;
 
@@ -689,7 +689,9 @@ _e_comp_wl_data_device_drag_finished(E_Drag *drag)
 
              if (drag_source)
                {
-                  if (drag_source->accepted && drag_source->current_dnd_action)
+                  if ((drag_source->accepted) &&
+                      (drag_source->current_dnd_action) &&
+                      (type == E_DND_DRAG_TYPE_DROPPED))
                     {
                        wl_data_device_send_drop(res);
                        if (wl_resource_get_version(drag_source->resource) >= WL_DATA_SOURCE_DND_DROP_PERFORMED_SINCE_VERSION)
index af4731d..0eeeaa1 100644 (file)
@@ -10,7 +10,7 @@ struct _E_Drag_Hook
 };
 
 /* local subsystem functions */
-static void           _e_drag_end(E_Drag *drag);
+static void           _e_drag_end(E_Drag *drag, E_Dnd_Drop_Type type);
 static void           _e_drag_free(E_Drag *drag);
 static void           _e_drag_rotation_angle_map_adjust(E_Drag *drag);
 
@@ -168,8 +168,7 @@ e_drag_current_get(void)
 }
 
 EINTERN E_Drag *
-e_drag_new(int x, int y,
-           void (*finished_cb)(E_Drag *drag))
+e_drag_new(int x, int y, E_Drag_Finished_Cb finished_cb)
 {
    E_Drag *drag;
 
@@ -249,22 +248,23 @@ e_drag_start(E_Drag *drag, int x, int y)
 }
 
 EINTERN void
-e_drag_end(E_Drag *drag)
+e_drag_end(E_Drag *drag, E_Dnd_Drop_Type type)
 {
    if (!drag) return;
-   _e_drag_end(drag);
+
+   _e_drag_end(drag, type);
 }
 
 /* local subsystem functions */
 static void
-_e_drag_end(E_Drag *drag)
+_e_drag_end(E_Drag *drag, E_Dnd_Drop_Type type)
 {
    evas_object_hide(drag->comp_object);
 
    _e_drag_hook_call(E_DRAG_HOOK_DRAG_END, drag);
 
    if (drag->cb.finished)
-     drag->cb.finished(drag);
+     drag->cb.finished(drag, type);
    drag->cb.finished = NULL;
 
    e_object_del(E_OBJECT(drag));
@@ -280,7 +280,7 @@ _e_drag_free(E_Drag *drag)
         e_grabinput_release(_drag_win, _drag_win);
 
         if (drag->cb.finished)
-          drag->cb.finished(drag);
+          drag->cb.finished(drag, E_DND_DRAG_TYPE_CANCELLED);
         drag->cb.finished = NULL;
 
         _drag_current = NULL;
@@ -345,7 +345,7 @@ _e_dnd_cb_mouse_up(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
         if (_drag_current->button_mask) return ECORE_CALLBACK_RENEW;
      }
 
-   _e_drag_end(_drag_current);
+   _e_drag_end(_drag_current, E_DND_DRAG_TYPE_DROPPED);
 
    return ECORE_CALLBACK_PASS_ON;
 }
@@ -371,7 +371,7 @@ _e_dnd_cb_zone_display_rotation_change_end(void *data EINA_UNUSED, int type EINA
 
    source = e_comp_wl->drag_source;
    source->accepted = EINA_FALSE;
-   _e_drag_end(_drag_current);
+   _e_drag_end(_drag_current, E_DND_DRAG_TYPE_DROPPED);
    E_FREE(e_comp_wl->drag);
 
    return ECORE_CALLBACK_PASS_ON;
index 5c1628d..4b623e1 100644 (file)
@@ -9,8 +9,6 @@ typedef struct _E_Drag_Hook     E_Drag_Hook;
 
 #define E_DRAG_TYPE 0xE0b0100f
 
-typedef void (*E_Drag_Hook_Cb)(void *data, E_Drag *drag);
-
 typedef enum _E_Drag_Hook_Point
 {
    E_DRAG_HOOK_DRAG_START,
@@ -18,13 +16,21 @@ typedef enum _E_Drag_Hook_Point
    E_DRAG_HOOK_LAST,
 } E_Drag_Hook_Point;
 
+typedef enum _E_Dnd_Drop_Type
+{
+   E_DND_DRAG_TYPE_DROPPED,
+   E_DND_DRAG_TYPE_CANCELLED,
+} E_Dnd_Drop_Type;
+
+typedef void (*E_Drag_Hook_Cb)(void *data, E_Drag *drag);
+typedef void (*E_Drag_Finished_Cb)(E_Drag *drag, E_Dnd_Drop_Type type);
 
 struct _E_Drag
 {
    E_Object           e_obj_inherit;
    struct
      {
-        void  (*finished)(E_Drag *drag);
+        E_Drag_Finished_Cb finished;
      } cb;
 
    Evas              *evas;
@@ -44,8 +50,7 @@ EINTERN int          e_dnd_shutdown(void);
 
 EINTERN E_Drag         *e_drag_current_get(void);
 /* x and y are the top left coords of the object that is to be dragged */
-EINTERN E_Drag         *e_drag_new(int x, int y,
-                                   void (*finished_cb)(E_Drag *drag));
+EINTERN E_Drag         *e_drag_new(int x, int y, E_Drag_Finished_Cb finished_cb);
 EINTERN Evas           *e_drag_evas_get(const E_Drag *drag);
 EINTERN void            e_drag_object_set(E_Drag *drag, Evas_Object *object);
 EINTERN void            e_drag_reference_point_set(E_Drag *drag, int x, int y);
@@ -54,7 +59,7 @@ EINTERN void            e_drag_resize(E_Drag *drag, int w, int h);
 
 /* x and y are the coords where the mouse is when dragging starts */
 EINTERN int             e_drag_start(E_Drag *drag, int x, int y);
-EINTERN void            e_drag_end(E_Drag *drag);
+EINTERN void            e_drag_end(E_Drag *drag, E_Dnd_Drop_Type type);
 
 
 EINTERN E_Drag_Hook *   e_drag_hook_add(E_Drag_Hook_Point hookpoint, E_Drag_Hook_Cb func, const void *data);
index 810ff6d..dba778e 100644 (file)
@@ -197,7 +197,7 @@ e_service_kvm_drop_perform(E_Client *ec)
      }
 
    e_comp_wl_data_offer_mimetype_action_accept(e_comp_wl->drag_offer);
-   e_drag_end(e_comp_wl->drag);
+   e_drag_end(e_comp_wl->drag, E_DND_DRAG_TYPE_DROPPED);
 
    return EINA_TRUE;
 }
@@ -216,7 +216,7 @@ e_service_kvm_drag_cancel(E_Client *ec)
 
    ELOGF("KVM", "Cancel drag by kvm_service request!", ec);
 
-   e_drag_end(e_comp_wl->drag);
+   e_drag_end(e_comp_wl->drag, E_DND_DRAG_TYPE_CANCELLED);
 
    return EINA_TRUE;
 }