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