yakov pushed a commit to branch master.

http://git.enlightenment.org/tools/erigo.git/commit/?id=dbedc662f47a7278b38efa4a6b18a719691206dc

commit dbedc662f47a7278b38efa4a6b18a719691206dc
Author: Yakov Goldberg <yako...@samsung.com>
Date:   Fri Feb 26 07:30:45 2016 +0200

    Fix DnD into objtree
    
    Drop data was not cleared after drop into objtree
---
 src/bin/gui/dnd.c | 34 ++++++++++++++++++++++++++++++++--
 1 file changed, 32 insertions(+), 2 deletions(-)

diff --git a/src/bin/gui/dnd.c b/src/bin/gui/dnd.c
index 6259efd..093302c 100644
--- a/src/bin/gui/dnd.c
+++ b/src/bin/gui/dnd.c
@@ -17,6 +17,7 @@
 #define DND_IMAGE_SIZE 15
 #define DROP_TARGET "__drop_target__"
 #define DRAG_ITEM_CONTAINER_INFO "__drag_item_container_info__"
+#define DROP_ITEM_CONTAINER_INFO "__drop_item_container_info__"
 
 #define DEBUGON 1
 #ifdef DEBUGON
@@ -657,11 +658,36 @@ _it_get_cb(Evas_Object *obj, Evas_Coord x, Evas_Coord y, 
int *xposret EINA_UNUSE
    return it;
 }
 
+/* Struct to hold info when container is drop target */
+typedef struct
+{
+   Elm_Drop_Item_Container_Cb dropcb;
+   void *dropdata;
+} _Drop_Item_Container_Info;
+
+static Eina_Bool
+_container_drop_cb(void *data EINA_UNUSED, Evas_Object *obj, Elm_Object_Item 
*it, Elm_Selection_Data *ev, int xposret, int yposret)
+{
+   _Drop_Item_Container_Info *_dici = NULL;
+   eo_do(obj, _dici = eo_key_data_get(DROP_ITEM_CONTAINER_INFO));
+   if (_dici && _dici->dropcb)
+     {
+        _dici->dropcb(_dici->dropdata, obj, it, ev, xposret, yposret);
+     }
+   _drop_data_free();
+   return EINA_TRUE;
+}
+
 void
 drop_item_container_set(Eo *obj, Elm_Drag_Item_Container_Pos poscb, 
Elm_Drop_Item_Container_Cb dropcb, void *dropdata)
 {
+   _Drop_Item_Container_Info *_dici = calloc(1, 
sizeof(_Drop_Item_Container_Info));
+   _dici->dropcb = dropcb;
+   _dici->dropdata = dropdata;
+   eo_do(obj, eo_key_data_set(DROP_ITEM_CONTAINER_INFO, _dici));
+
    elm_drop_item_container_add(obj, ELM_SEL_FORMAT_TEXT, _it_get_cb,
-                               _dropenter, NULL, _dropleave, NULL, poscb, 
NULL, dropcb, dropdata);
+                               _dropenter, NULL, _dropleave, NULL, poscb, 
NULL, _container_drop_cb, NULL);
 }
 
 static Evas_Object *
@@ -692,7 +718,7 @@ _gl_createicon(void *data, Evas_Object *win, Evas_Coord 
*xoff, Evas_Coord *yoff)
    return icon;
 }
 
-/* Structo to hold info when dragging from item container */
+/* Struct to hold info when dragging from item container */
 typedef struct
 {
    Elm_Drag_Start dragstart;
@@ -771,6 +797,10 @@ drag_item_container_set(Eo *obj, double anim_tm, double 
tm_to_drag, Elm_Drag_Sta
 void
 drop_item_container_del(Eo *obj)
 {
+   _Drop_Item_Container_Info *_dici = NULL;
+
+   eo_do(obj, _dici = eo_key_data_get(DROP_ITEM_CONTAINER_INFO));
+   free(_dici);
    elm_drop_item_container_del(obj);
 }
 

-- 


Reply via email to