diff --git a/legacy/edje/src/lib/edje_load.c b/legacy/edje/src/lib/edje_load.c index 64d6013a31..365a24155a 100644 --- a/legacy/edje/src/lib/edje_load.c +++ b/legacy/edje/src/lib/edje_load.c @@ -840,15 +840,7 @@ _edje_file_del(Edje *ed) } if (rp->swallowed_object) { - evas_object_smart_member_del(rp->swallowed_object); - evas_object_event_callback_del(rp->swallowed_object, - EVAS_CALLBACK_FREE, - _edje_object_part_swallow_free_cb); - evas_object_clip_unset(rp->swallowed_object); - evas_object_data_del(rp->swallowed_object, "\377 edje.swallowing_part"); - if (rp->part->mouse_events) - _edje_callbacks_del(rp->swallowed_object); - + _edje_real_part_swallow_clear(rp); /* Objects swallowed by the app do not get deleted, but those internally swallowed (GROUP type) do. */ switch (rp->part->type) @@ -862,7 +854,6 @@ _edje_file_del(Edje *ed) default: break; } - rp->swallowed_object = NULL; } if (rp->items) diff --git a/legacy/edje/src/lib/edje_private.h b/legacy/edje/src/lib/edje_private.h index beffd1840a..4a836f3dec 100644 --- a/legacy/edje/src/lib/edje_private.h +++ b/legacy/edje/src/lib/edje_private.h @@ -1148,6 +1148,7 @@ void _edje_block_violate(Edje *ed); void _edje_object_part_swallow_free_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); void _edje_object_part_swallow_changed_hints_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); void _edje_real_part_swallow(Edje_Real_Part *rp, Evas_Object *obj_swallow); +void _edje_real_part_swallow_clear(Edje_Real_Part *rp); void _edje_box_init(void); void _edje_box_shutdown(void); Eina_Bool _edje_box_layout_find(const char *name, Evas_Object_Box_Layout *cb, void **data, void (**free_data)(void *data)); diff --git a/legacy/edje/src/lib/edje_util.c b/legacy/edje/src/lib/edje_util.c index 280cf370d3..80461052e2 100644 --- a/legacy/edje/src/lib/edje_util.c +++ b/legacy/edje/src/lib/edje_util.c @@ -3887,19 +3887,7 @@ _edje_real_part_swallow(Edje_Real_Part *rp, Evas_Object *obj_swallow) { if (rp->swallowed_object != obj_swallow) { - evas_object_smart_member_del(rp->swallowed_object); - evas_object_event_callback_del_full(rp->swallowed_object, - EVAS_CALLBACK_FREE, - _edje_object_part_swallow_free_cb, - rp->edje->obj); - evas_object_event_callback_del_full(rp->swallowed_object, - EVAS_CALLBACK_CHANGED_SIZE_HINTS, - _edje_object_part_swallow_changed_hints_cb, - rp); - evas_object_clip_unset(rp->swallowed_object); - evas_object_data_del(rp->swallowed_object, "\377 edje.swallowing_part"); - if (rp->part->mouse_events) - _edje_callbacks_del(rp->swallowed_object); + _edje_real_part_swallow_clear(rp); rp->swallowed_object = NULL; } else @@ -3949,3 +3937,21 @@ _edje_real_part_swallow(Edje_Real_Part *rp, Evas_Object *obj_swallow) rp->edje->dirty = 1; _edje_recalc(rp->edje); } + +void +_edje_real_part_swallow_clear(Edje_Real_Part *rp) +{ + evas_object_smart_member_del(rp->swallowed_object); + evas_object_event_callback_del_full(rp->swallowed_object, + EVAS_CALLBACK_FREE, + _edje_object_part_swallow_free_cb, + rp->edje->obj); + evas_object_event_callback_del_full(rp->swallowed_object, + EVAS_CALLBACK_CHANGED_SIZE_HINTS, + _edje_object_part_swallow_changed_hints_cb, + rp); + evas_object_clip_unset(rp->swallowed_object); + evas_object_data_del(rp->swallowed_object, "\377 edje.swallowing_part"); + if (rp->part->mouse_events) + _edje_callbacks_del(rp->swallowed_object); +}