logic problem on evas_free(). shoudl be fixed now... :)

SVN revision: 6559
This commit is contained in:
Carsten Haitzler 2003-01-10 05:38:47 +00:00
parent 3f207b8c08
commit 7c80fa9a3e
5 changed files with 30 additions and 5 deletions

View File

@ -44,6 +44,20 @@ evas_layer_new(Evas *e)
return lay;
}
void
evas_layer_pre_free(Evas_Layer *lay)
{
Evas_Object_List *l;
for (l = (Evas_Object_List *)lay->objects; l; l = l->next)
{
Evas_Object *obj;
obj = (Evas_Object *)l;
evas_object_del(obj);
}
}
void
evas_layer_free(Evas_Layer *lay)
{
@ -52,7 +66,6 @@ evas_layer_free(Evas_Layer *lay)
Evas_Object *obj;
obj = (Evas_Object *)lay->objects;
if (obj->smart.smart) evas_object_smart_del(obj);
evas_object_free(obj, 0);
}
free(lay);

View File

@ -72,13 +72,19 @@ evas_new(void)
void
evas_free(Evas *e)
{
Evas_Object_List *l;
MAGIC_CHECK(e, Evas, MAGIC_EVAS);
return;
MAGIC_CHECK_END();
evas_object_font_path_clear(e);
e->pointer.object.in = evas_list_free(e->pointer.object.in);
for (l = (Evas_Object_List *)(e->layers); l; l = l->next)
{
Evas_Layer *lay;
lay = (Evas_Layer *)l;
evas_layer_pre_free(lay);
}
while (e->layers)
{
Evas_Layer *lay;
@ -88,6 +94,9 @@ evas_free(Evas *e)
evas_layer_free(lay);
}
evas_object_font_path_clear(e);
e->pointer.object.in = evas_list_free(e->pointer.object.in);
if (e->name_hash) evas_hash_free(e->name_hash);
while (e->damages)

View File

@ -422,6 +422,8 @@ evas_object_del(Evas_Object *obj)
evas_object_change(obj);
obj->delete_me = 1;
if (obj->smart.smart) evas_object_smart_del(obj);
evas_object_smart_cleanup(obj);
obj->smart.smart = NULL;
}
void

View File

@ -238,8 +238,8 @@ evas_object_smart_del(Evas_Object *obj)
Evas_Smart *s;
s = obj->smart.smart;
if (obj->smart.parent) evas_object_smart_member_del(obj);
if ((s) && (s->func_del)) s->func_del(obj);
if (obj->smart.parent) evas_object_smart_member_del(obj);
if (s) evas_object_smart_unuse(s);
}

View File

@ -497,6 +497,7 @@ void evas_object_render_pre_effect_updates(Evas_List *updates, Evas_Object *obj,
Evas_List * evas_rects_return_difference_rects(int x, int y, int w, int h, int xx, int yy, int ww, int hh);
void evas_object_clip_recalc(Evas_Object *obj);
Evas_Layer *evas_layer_new(Evas *e);
void evas_layer_pre_free(Evas_Layer *lay);
void evas_layer_free(Evas_Layer *lay);
Evas_Layer *evas_layer_find(Evas *e, int layer_num);
void evas_layer_add(Evas_Layer *lay);