From 66098e4c8251ce954f94ec016f357601193e7a74 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Wed, 22 Jun 2011 09:47:16 +0000 Subject: [PATCH] edje: don't forget to del text_class when destroying object. SVN revision: 60585 --- legacy/edje/src/lib/edje_main.c | 15 ++++++++++++++- legacy/edje/src/lib/edje_private.h | 1 + legacy/edje/src/lib/edje_smart.c | 1 + legacy/edje/src/lib/edje_util.c | 11 +++++++++++ 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/legacy/edje/src/lib/edje_main.c b/legacy/edje/src/lib/edje_main.c index 0b98c1a20d..708f851cc9 100644 --- a/legacy/edje/src/lib/edje_main.c +++ b/legacy/edje/src/lib/edje_main.c @@ -146,6 +146,15 @@ edje_shutdown(void) } /* Private Routines */ +static Eina_Bool +_text_class_member_free(const Eina_Hash *hash __UNUSED__, + const void *key, + void *data, + void *fdata) +{ + _edje_text_class_member_direct_del(key, data); + return EINA_TRUE; +} void _edje_del(Edje *ed) @@ -201,7 +210,11 @@ _edje_del(Edje *ed) free(cb); } - if (ed->members) eina_hash_free(ed->members); + if (ed->members) + { + eina_hash_foreach(ed->members, _text_class_member_free, NULL); + eina_hash_free(ed->members); + } free(ed); } diff --git a/legacy/edje/src/lib/edje_private.h b/legacy/edje/src/lib/edje_private.h index 3267dd6358..9fe1ada045 100644 --- a/legacy/edje/src/lib/edje_private.h +++ b/legacy/edje/src/lib/edje_private.h @@ -1545,6 +1545,7 @@ void _edje_color_class_hash_free(void); Edje_Text_Class *_edje_text_class_find(Edje *ed, const char *text_class); void _edje_text_class_member_add(Edje *ed, const char *text_class); void _edje_text_class_member_del(Edje *ed, const char *text_class); +void _edje_text_class_member_direct_del(const char *text_class, Eina_List *lookup); void _edje_text_class_members_free(void); void _edje_text_class_hash_free(void); diff --git a/legacy/edje/src/lib/edje_smart.c b/legacy/edje/src/lib/edje_smart.c index 2b847e28a7..4c1e59c472 100644 --- a/legacy/edje/src/lib/edje_smart.c +++ b/legacy/edje/src/lib/edje_smart.c @@ -114,6 +114,7 @@ _edje_smart_add(Evas_Object *obj) evas_object_geometry_get(obj, &(ed->x), &(ed->y), &(ed->w), &(ed->h)); ed->obj = obj; _edje_edjes = eina_list_append(_edje_edjes, obj); + fprintf(stderr, "living edje object: %i\n", eina_list_count(_edje_edjes)); /* { Eina_List *l; diff --git a/legacy/edje/src/lib/edje_util.c b/legacy/edje/src/lib/edje_util.c index 578fca314e..01d74c7511 100644 --- a/legacy/edje/src/lib/edje_util.c +++ b/legacy/edje/src/lib/edje_util.c @@ -3695,6 +3695,17 @@ _edje_text_class_find(Edje *ed, const char *text_class) return eina_hash_find(_edje_text_class_hash, text_class); } +void +_edje_text_class_member_direct_del(const char *text_class, + Eina_List *lookup) +{ + Eina_List *members; + + members = eina_hash_find(_edje_text_class_member_hash, text_class); + members = eina_list_remove_list(members, lookup); + eina_hash_set(_edje_text_class_member_hash, text_class, members); +} + void _edje_text_class_member_add(Edje *ed, const char *text_class) {