edje: don't forget to del text_class when destroying object.
authorcedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 22 Jun 2011 09:47:16 +0000 (09:47 +0000)
committercedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 22 Jun 2011 09:47:16 +0000 (09:47 +0000)
git-svn-id: http://svn.enlightenment.org/svn/e/trunk/edje@60585 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/edje_main.c
src/lib/edje_private.h
src/lib/edje_smart.c
src/lib/edje_util.c

index 0b98c1a..708f851 100644 (file)
@@ -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);
 }
 
index 3267dd6..9fe1ada 100644 (file)
@@ -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);
 
index 2b847e2..4c1e59c 100644 (file)
@@ -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;
index 578fca3..01d74c7 100644 (file)
@@ -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;