rimmed pushed a commit to branch master.

http://git.enlightenment.org/tools/eflete.git/commit/?id=09b780f397b2fb119d41e55891db93ace551fe68

commit 09b780f397b2fb119d41e55891db93ace551fe68
Author: Andrii Kroitor <an.kroi...@samsung.com>
Date:   Mon Dec 21 11:30:18 2015 +0200

    editor: save references to part when deleting it
---
 src/bin/editor/editor_part.c | 57 ++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 55 insertions(+), 2 deletions(-)

diff --git a/src/bin/editor/editor_part.c b/src/bin/editor/editor_part.c
index ff51486..9dc5f49 100644
--- a/src/bin/editor/editor_part.c
+++ b/src/bin/editor/editor_part.c
@@ -545,8 +545,8 @@ editor_part_reset(Evas_Object *edit_object, Change *change, 
Eina_Bool merge __UN
                   const char *part_name)
 {
    Eina_Bool res = true;
-   Eina_List *states, *items, *l;
-   Eina_Stringshare *state, *name;
+   Eina_List *items, *states, *parts, *l, *l_s;
+   Eina_Stringshare *part, *state, *name, *ref;
    double state_val;
 
    assert(edit_object != NULL);
@@ -609,6 +609,59 @@ editor_part_reset(Evas_Object *edit_object, Change 
*change, Eina_Bool merge __UN
       res = res && editor_part_item_del(edit_object, change, false, part_name, 
name);
    edje_edit_string_list_free(items);
 
+   /* remove external references */
+   parts = edje_edit_parts_list_get(edit_object);
+   EINA_LIST_FOREACH(parts, l, part)
+     {
+        if (part == part_name) continue;
+        states = edje_edit_part_states_list_get(edit_object, part);
+        type = edje_edit_part_type_get(edit_object, part);
+        EINA_LIST_FOREACH(states, l_s, state)
+          {
+             state_name_split(state, &name, &state_val);
+
+             #define RESET_STATE_REF(ATT) \
+             ref = edje_edit_state_ ## ATT ## _get(edit_object, part, name, 
state_val); \
+             if (ref == part_name) \
+               res = res && editor_state_ ## ATT ## _reset(edit_object, 
change, part, name, state_val);
+
+             RESET_STATE_REF(rel1_to_x);
+             RESET_STATE_REF(rel2_to_x);
+             RESET_STATE_REF(rel1_to_y);
+             RESET_STATE_REF(rel2_to_y);
+             if (type == EDJE_PART_TYPE_PROXY)
+               {
+                  RESET_STATE_REF(proxy_source);
+               }
+             else if (type == EDJE_PART_TYPE_TEXT)
+               {
+                  RESET_STATE_REF(text_source);
+                  RESET_STATE_REF(text_text_source);
+               }
+
+             eina_stringshare_del(name);
+          }
+        #define RESET_PART_REF(ATT) \
+        ref = edje_edit_part_ ## ATT ## _get(edit_object, part); \
+        if (ref == part_name) \
+          res = res && editor_part_ ## ATT ## _reset(edit_object, change, 
part);
+
+        RESET_PART_REF(clip_to);
+        RESET_PART_REF(drag_confine);
+        RESET_PART_REF(drag_threshold);
+        RESET_PART_REF(drag_event);
+        if (type == EDJE_PART_TYPE_TEXTBLOCK)
+          {
+             RESET_PART_REF(source);
+             RESET_PART_REF(source2);
+             RESET_PART_REF(source3);
+             RESET_PART_REF(source4);
+             RESET_PART_REF(source5);
+             RESET_PART_REF(source6);
+          }
+
+     }
+   edje_edit_string_list_free(parts);
    you_shall_pass_editor_signals(change);
 
    return res;

-- 


Reply via email to