From: cedric Date: Wed, 22 Jun 2011 09:47:16 +0000 (+0000) Subject: edje: don't forget to del text_class when destroying object. X-Git-Tag: submit/trunk/20120815.180907~594 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=775319c176a7dd86ccfee2ab2c76543eba79fca1;p=profile%2Fivi%2Fedje.git edje: don't forget to del text_class when destroying object. git-svn-id: http://svn.enlightenment.org/svn/e/trunk/edje@60585 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- diff --git a/src/lib/edje_main.c b/src/lib/edje_main.c index 0b98c1a..708f851 100644 --- a/src/lib/edje_main.c +++ b/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/src/lib/edje_private.h b/src/lib/edje_private.h index 3267dd6..9fe1ada 100644 --- a/src/lib/edje_private.h +++ b/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/src/lib/edje_smart.c b/src/lib/edje_smart.c index 2b847e2..4c1e59c 100644 --- a/src/lib/edje_smart.c +++ b/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/src/lib/edje_util.c b/src/lib/edje_util.c index 578fca3..01d74c7 100644 --- a/src/lib/edje_util.c +++ b/src/lib/edje_util.c @@ -3696,6 +3696,17 @@ _edje_text_class_find(Edje *ed, const char *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) { Eina_List *members;