edje: correctly unswallow things on object destruction.
authorcedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 13 Jun 2012 06:48:41 +0000 (06:48 +0000)
committercedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 13 Jun 2012 06:48:41 +0000 (06:48 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/edje@72061 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/edje_util.c

index b5bd45d..93dd604 100644 (file)
@@ -80,7 +80,9 @@ _edje_user_definition_free(Edje_User_Defined *eud)
      {
       case EDJE_USER_SWALLOW:
        child = eud->u.swallow.child;
-       edje_object_part_unswallow(eud->ed->obj, child);
+       rp = _edje_real_part_recursive_get(eud->ed, eud->part);
+       _edje_real_part_swallow_clear(rp);
+        rp->swallowed_object = NULL;
        break;
       case EDJE_USER_BOX_PACK:
        child = eud->u.box.child;
@@ -2814,7 +2816,7 @@ edje_object_part_unswallow(Evas_Object *obj, Evas_Object *obj_swallow)
        evas_object_event_callback_del_full(rp->swallowed_object,
                                             EVAS_CALLBACK_FREE,
                                             _edje_object_part_swallow_free_cb,
-                                            rp->edje->obj);
+                                            rp);
        evas_object_event_callback_del_full(rp->swallowed_object,
                                             EVAS_CALLBACK_CHANGED_SIZE_HINTS,
                                             _edje_object_part_swallow_changed_hints_cb,
@@ -4918,10 +4920,12 @@ _edje_block_violate(Edje *ed)
 void
 _edje_object_part_swallow_free_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
 {
-   Evas_Object *edje_obj;
+   Edje_Real_Part *rp;
+
+   rp = data;
+   _edje_real_part_swallow_clear(rp);
+   rp->swallowed_object = NULL;
 
-   edje_obj = data;
-   edje_object_part_unswallow(edje_obj, obj);
    return;
 }
 
@@ -5052,7 +5056,7 @@ _edje_real_part_swallow(Edje_Real_Part *rp,
    evas_object_event_callback_add(rp->swallowed_object,
                                   EVAS_CALLBACK_DEL,
                                  _edje_object_part_swallow_free_cb,
-                                 rp->edje->obj);
+                                 rp);
    evas_object_event_callback_add(rp->swallowed_object,
                                   EVAS_CALLBACK_CHANGED_SIZE_HINTS,
                                  _edje_object_part_swallow_changed_hints_cb,
@@ -5090,7 +5094,7 @@ _edje_real_part_swallow_clear(Edje_Real_Part *rp)
    evas_object_event_callback_del_full(rp->swallowed_object,
                                        EVAS_CALLBACK_FREE,
                                        _edje_object_part_swallow_free_cb,
-                                       rp->edje->obj);
+                                       rp);
    evas_object_event_callback_del_full(rp->swallowed_object,
                                        EVAS_CALLBACK_CHANGED_SIZE_HINTS,
                                        _edje_object_part_swallow_changed_hints_cb,