From d7e9d661f00c701947554382b96eec6526e82918 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Mon, 4 Jun 2012 01:24:07 +0000 Subject: [PATCH] edje: remove object from the tracked list when they are deleted. SVN revision: 71672 --- legacy/edje/src/lib/edje_util.c | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/legacy/edje/src/lib/edje_util.c b/legacy/edje/src/lib/edje_util.c index 87a25edf65..20f596c73e 100644 --- a/legacy/edje/src/lib/edje_util.c +++ b/legacy/edje/src/lib/edje_util.c @@ -3994,10 +3994,34 @@ _edje_real_part_box_remove_all(Edje_Real_Part *rp, Eina_Bool clear) } static void -_edje_table_child_del_cb(void *data, Evas *e __UNUSED__, Evas_Object *child __UNUSED__, void *einfo __UNUSED__) +_edje_table_child_del_cb(void *data, Evas *e __UNUSED__, Evas_Object *child, void *einfo __UNUSED__) { + Edje_User_Defined *eud; + Eina_List *l; Edje_Real_Part *rp = data; + EINA_LIST_FOREACH(rp->edje->user_defined, l, eud) + if (rp->part->type == EDJE_PART_TYPE_BOX) + { + if (eud->type == EDJE_USER_BOX_PACK && + eud->u.box.child == child && + !strcmp(rp->part->name, eud->part)) + { + _edje_user_definition_free(eud); + break; + } + } + else if (rp->part->type == EDJE_PART_TYPE_TABLE) + { + if (eud->type == EDJE_USER_TABLE_PACK && + eud->u.table.child == child && + !strcmp(rp->part->name, eud->part)) + { + _edje_user_definition_free(eud); + break; + } + } + rp->edje->dirty = 1; rp->edje->recalc_call = 1; #ifdef EDJE_CALC_CACHE @@ -4066,7 +4090,6 @@ edje_object_part_table_pack(Evas_Object *obj, const char *part, Evas_Object *chi if (rp->part->type != EDJE_PART_TYPE_TABLE) return EINA_FALSE; r = _edje_real_part_table_pack(rp, child_obj, col, row, colspan, rowspan); - if (r) { eud = _edje_user_definition_new(EDJE_USER_TABLE_PACK, part, ed);