tasn pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=4d0494574b2cda85ff0c6b968be362594c36aa37

commit 4d0494574b2cda85ff0c6b968be362594c36aa37
Author: Tom Hacohen <t...@stosb.com>
Date:   Thu Apr 7 14:56:57 2016 +0100

    Edje: Reparent when swallowing/unswallowing.
    
    On swallow make the edje object the parent, on unswallow the canvas.
---
 src/lib/edje/edje_edit.c |  7 ++++++-
 src/lib/edje/edje_util.c | 13 +++++++++++++
 2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/src/lib/edje/edje_edit.c b/src/lib/edje/edje_edit.c
index 05ed301..5ddd4f4 100644
--- a/src/lib/edje/edje_edit.c
+++ b/src/lib/edje/edje_edit.c
@@ -315,6 +315,7 @@ _edje_real_part_free(Edje *ed, Edje_Real_Part *rp)
    if ((rp->type == EDJE_RP_TYPE_SWALLOW) && (rp->typedata.swallow)
        && (rp->typedata.swallow->swallowed_object))
      {
+        eo_parent_set(rp->typedata.swallow->swallowed_object, 
evas_common_evas_get(ed->obj));
         evas_object_smart_member_del(rp->typedata.swallow->swallowed_object);
         evas_object_event_callback_del(rp->typedata.swallow->swallowed_object,
                                        EVAS_CALLBACK_FREE, 
_edje_object_part_swallow_free_cb);
@@ -3147,7 +3148,11 @@ _edje_edit_real_part_add(Evas_Object *obj, const char 
*name, Edje_Part_Type type
         evas_object_show(rp->object);
         evas_object_smart_member_add(rp->object, ed->obj);
         evas_object_layer_set(rp->object, evas_object_layer_get(ed->obj));
-        if (ep->type != EDJE_PART_TYPE_SWALLOW && ep->type != 
EDJE_PART_TYPE_GROUP)
+        if (ep->type == EDJE_PART_TYPE_SWALLOW)
+          {
+             eo_parent_set(rp->object, ed->obj);
+          }
+        else if (ep->type != EDJE_PART_TYPE_GROUP)
           {
              if (ep->mouse_events)
                {
diff --git a/src/lib/edje/edje_util.c b/src/lib/edje/edje_util.c
index 4a522d8..a34d81c 100644
--- a/src/lib/edje/edje_util.c
+++ b/src/lib/edje/edje_util.c
@@ -4966,6 +4966,7 @@ _edje_child_add(Edje *ed, Edje_Real_Part *rp, Evas_Object 
*child)
    evas_object_event_callback_add(child, EVAS_CALLBACK_DEL, 
_edje_child_del_cb, rp);
    evas_object_data_set(child, ".edje", ed);
    if (!ed) return;
+   eo_parent_set(child, ed->obj);
    ed->dirty = EINA_TRUE;
    ed->recalc_call = EINA_TRUE;
 #ifdef EDJE_CALC_CACHE
@@ -4975,11 +4976,21 @@ _edje_child_add(Edje *ed, Edje_Real_Part *rp, 
Evas_Object *child)
 }
 
 static void
+_eo_unparent_helper(Eo *child, Eo *parent)
+{
+   if (eo_parent_get(child) == parent)
+     {
+        eo_parent_set(child, evas_common_evas_get(parent));
+     }
+}
+
+static void
 _edje_child_remove(Edje *ed, Edje_Real_Part *rp, Evas_Object *child)
 {
    evas_object_event_callback_del_full(child, EVAS_CALLBACK_DEL, 
_edje_child_del_cb, rp);
    evas_object_data_del(child, ".edje");
    if (!ed) return;
+   _eo_unparent_helper(child, ed->obj);
    ed->dirty = EINA_TRUE;
    ed->recalc_call = EINA_TRUE;
 #ifdef EDJE_CALC_CACHE
@@ -6322,6 +6333,7 @@ _edje_real_part_swallow(Edje *ed,
 #endif
    if (!obj_swallow) return;
    rp->typedata.swallow->swallowed_object = obj_swallow;
+   eo_parent_set(obj_swallow, ed->obj);
    evas_object_smart_member_add(rp->typedata.swallow->swallowed_object, 
ed->obj);
    if (rp->part->clip_to_id >= 0)
      {
@@ -6380,6 +6392,7 @@ _edje_real_part_swallow_clear(Edje *ed, Edje_Real_Part 
*rp)
    if ((rp->type != EDJE_RP_TYPE_SWALLOW) ||
        (!rp->typedata.swallow)) return;
    if (!rp->typedata.swallow->swallowed_object) return;
+   _eo_unparent_helper(rp->typedata.swallow->swallowed_object, ed->obj);
    evas_object_smart_member_del(rp->typedata.swallow->swallowed_object);
    evas_object_event_callback_del_full(rp->typedata.swallow->swallowed_object,
                                        EVAS_CALLBACK_DEL,

-- 


Reply via email to