yakov pushed a commit to branch master. http://git.enlightenment.org/tools/erigo.git/commit/?id=6c398b7aa3f9fccb424337bb908b6e937ae5eca3
commit 6c398b7aa3f9fccb424337bb908b6e937ae5eca3 Author: Yakov Goldberg <yako...@samsung.com> Date: Wed Nov 11 18:14:49 2015 +0200 DnD inside window sets widget as resize object Now, when object will be dropped into a window, it will be set as resize object. --- src/bin/gui/editor.c | 75 +++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 53 insertions(+), 22 deletions(-) diff --git a/src/bin/gui/editor.c b/src/bin/gui/editor.c index 41119e3..cdb8286 100644 --- a/src/bin/gui/editor.c +++ b/src/bin/gui/editor.c @@ -1621,7 +1621,7 @@ enum /* canvas_drop_target != NULL when dropping on canvas. */ static Eina_Bool -_drop_target_drop(Gui_Widget *drop_target_wdg, Eo *canvas_drop_target, const char *drag_data, Eina_Bool dropped_to_objtree) +_drop_target_drop(Gui_Widget *drop_target_wdg, Eo *canvas_drop_target, const char *drag_data, Eina_Bool dropped_to_objtree EINA_UNUSED) { DnD_Main_Obj_Info *di = NULL; const Gui_Widget *new_wdg = NULL; @@ -1666,12 +1666,17 @@ _drop_target_drop(Gui_Widget *drop_target_wdg, Eo *canvas_drop_target, const cha Gui_Context *ctx = _active_context_get(); if (!ctx) return EINA_FALSE; const Gui_Session *session = gui_context_editor_session_get(ctx); + + /* Commeting out positioning of dropped widget. + * This part makes sens when DnD inside window changes position. */ +#if 0 /* Drop when dragging from factory. */ int drop_x = di->pointer_x, drop_y = di->pointer_y; if (dropped_to_objtree) { drop_x = drop_y = 0; } +#endif /* FIXME: delete this, as wdg_cur must be created in _drop_target_pos()*/ if (!_dragged_wdg) @@ -1715,32 +1720,58 @@ _drop_target_drop(Gui_Widget *drop_target_wdg, Eo *canvas_drop_target, const cha { if (new_wdg) { - Gui_Widget_Property *old_prop, *prop; - Gui_Value *val; - old_prop = wdg_prop_get(new_wdg, DB_DEF_EFL_GFX_BASE_CLASS, POSITION_SET); - if (!old_prop) - { - Op_Desc *op = db_mro_op_desc_get(wdg_class_name_get(new_wdg), DB_DEF_EFL_GFX_BASE_CLASS, POSITION_SET); - prop = prop_create_for_op(op); - } - else + /* When dropping to window, new widget will be dropeed as resize object.*/ + Object_Container *_old_container, *_new_container; + _old_container = (Object_Container *) wdg_obj_container_get(drop_target_wdg); + _new_container = obj_container_copy(_old_container); + + memento_command_add(wdg_eid_get(drop_target_wdg), + MEMENTO_OBJ_CONTAINER, + _old_container, _new_container); + /* Current memento is a memento created, during _factory _widget_create earlier in this func. */ + wdg_obj_container_unset(drop_target_wdg); + wdg_obj_container_set(drop_target_wdg, _new_container); + + const Op_Desc *op_desc = db_container_desc_op_desc_get(db_container_desc_get(wdg_class_name_get(drop_target_wdg)), CONTAINER_PACK); + Gui_Widget_Property *prop = prop_create_for_op(op_desc); + Gui_Value *val = prop_value_nth_get(prop, 0); + gui_value_name_id_set(val, GUI_TYPE_OBJECT, wdg_eid_get(new_wdg)); + + Object_Container_Item *ci = obj_container_item_new(prop, wdg_eid_get(new_wdg)); + wdg_obj_container_item_add(drop_target_wdg, ci, -1); + + /* Commeting out positioning of dropped widget. + * This part makes sens when DnD inside window changes position. */ +#if 0 { - prop = prop_copy(old_prop); - } + Gui_Widget_Property *old_prop, *prop; + Gui_Value *val; + old_prop = wdg_prop_get(new_wdg, DB_DEF_EFL_GFX_BASE_CLASS, POSITION_SET); + if (!old_prop) + { + Op_Desc *op = db_mro_op_desc_get(wdg_class_name_get(new_wdg), DB_DEF_EFL_GFX_BASE_CLASS, POSITION_SET); + prop = prop_create_for_op(op); + } + else + { + prop = prop_copy(old_prop); + } - val = prop_value_nth_get(prop, 0); - gui_value_int_set(val, drop_x); - val = prop_value_nth_get(prop, 1); - gui_value_int_set(val, drop_y); - propview_item_update(prop); + val = prop_value_nth_get(prop, 0); + gui_value_int_set(val, drop_x); + val = prop_value_nth_get(prop, 1); + gui_value_int_set(val, drop_y); + propview_item_update(prop); - memento_command_add(wdg_eid_get(new_wdg), MEMENTO_PROPERTY, old_prop, prop); + memento_command_add(wdg_eid_get(new_wdg), MEMENTO_PROPERTY, old_prop, prop); - if (old_prop) - { - wdg_prop_remove((Gui_Widget *) new_wdg, old_prop); + if (old_prop) + { + wdg_prop_remove((Gui_Widget *) new_wdg, old_prop); + } + wdg_prop_add((Gui_Widget *) new_wdg, prop); } - wdg_prop_add((Gui_Widget *) new_wdg, prop); +#endif } } else if (drop_to_wdg == DROP_TO_BOX) --