diff --git a/legacy/edje/src/lib/edje_load.c b/legacy/edje/src/lib/edje_load.c index bb7f762871..5f5e587f6b 100644 --- a/legacy/edje/src/lib/edje_load.c +++ b/legacy/edje/src/lib/edje_load.c @@ -1234,7 +1234,7 @@ _edje_file_del(Edje *ed) } if (ed->L) _edje_lua2_script_shutdown(ed); - while (ed->subobjs) evas_object_del(ed->subobjs->data); + while (ed->subobjs) _edje_subobj_unregister(ed, ed->subobjs->data); if (ed->table_parts) free(ed->table_parts); ed->table_parts = NULL; ed->table_parts_size = 0; diff --git a/legacy/edje/src/lib/edje_private.h b/legacy/edje/src/lib/edje_private.h index a3718d1da6..6ef78d41c4 100644 --- a/legacy/edje/src/lib/edje_private.h +++ b/legacy/edje/src/lib/edje_private.h @@ -2115,6 +2115,7 @@ void _edje_lib_ref(void); void _edje_lib_unref(void); void _edje_subobj_register(Edje *ed, Evas_Object *ob); +void _edje_subobj_unregister(Edje *ed, Evas_Object *ob); void _edje_multisense_init(void); void _edje_multisense_shutdown(void); diff --git a/legacy/edje/src/lib/edje_util.c b/legacy/edje/src/lib/edje_util.c index 20f596c73e..6f77ba36a5 100644 --- a/legacy/edje/src/lib/edje_util.c +++ b/legacy/edje/src/lib/edje_util.c @@ -5225,9 +5225,7 @@ static void _cb_subobj_del(void *data, __UNUSED__ Evas *e, Evas_Object *obj, __UNUSED__ void *event_info) { Edje *ed = data; - ed->subobjs = eina_list_remove(ed->subobjs, obj); - evas_object_event_callback_del_full(obj, EVAS_CALLBACK_DEL, - _cb_subobj_del, ed); + _edje_subobj_unregister(ed, obj); } void @@ -5238,4 +5236,12 @@ _edje_subobj_register(Edje *ed, Evas_Object *ob) _cb_subobj_del, ed); } +void +_edje_subobj_unregister(Edje *ed, Evas_Object *obj) +{ + ed->subobjs = eina_list_remove(ed->subobjs, obj); + evas_object_event_callback_del_full(obj, EVAS_CALLBACK_DEL, + _cb_subobj_del, ed); +} + /* vim:set ts=8 sw=3 sts=3 expandtab cino=>5n-2f0^-2{2(0W1st0 :*/