This is one of the worse explanations I've ever seen, I had to hunt it on my own. With that being said, thank you for reporting it, it's fixed now.
-- Tom. On 28/04/16 07:57, Daniel Zaoui wrote: > Yo Tom, > > I think there is an issue with the reparenting. The combobox test crashes on > it. > > If you take a scenario to add an entry to a combobox, it seems working in > this way: > > entry = eo_add(combobox) -> 1 ref > eo_parent_set(entry, edje_combobox) via _edje_real_part_swallow > __entry: 1 ref + 1 TempRef > eo_composite_detach(combobox, entry): > eo_parent_set(entry, NULL): > __entry: 1 ref + 2 TempRef > __body: 0 ref + 2 TempRef > __exit: 0 ref + 1 TempRef > __body: sets the parent but doesn't ref > __exit: 0 ref + 0 TempRef -> destruction > > You should double-check to be sure I didn't miss something. > > JackDanielZ > > On Mon, 18 Apr 2016 02:15:53 -0700 > Tom Hacohen <t...@stosb.com> wrote: > >> 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, >> > > > ------------------------------------------------------------------------------ > Find and fix application performance issues faster with Applications Manager > Applications Manager provides deep performance insights into multiple tiers of > your business applications. It resolves application problems quickly and > reduces your MTTR. Get your free trial! > https://ad.doubleclick.net/ddm/clk/302982198;130105516;z > _______________________________________________ > enlightenment-devel mailing list > enlightenment-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel > ------------------------------------------------------------------------------ Find and fix application performance issues faster with Applications Manager Applications Manager provides deep performance insights into multiple tiers of your business applications. It resolves application problems quickly and reduces your MTTR. Get your free trial! https://ad.doubleclick.net/ddm/clk/302982198;130105516;z _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel