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; 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 void
evas_layer_free(Evas_Layer *lay) evas_layer_free(Evas_Layer *lay)
{ {
@ -52,7 +66,6 @@ evas_layer_free(Evas_Layer *lay)
Evas_Object *obj; Evas_Object *obj;
obj = (Evas_Object *)lay->objects; obj = (Evas_Object *)lay->objects;
if (obj->smart.smart) evas_object_smart_del(obj);
evas_object_free(obj, 0); evas_object_free(obj, 0);
} }
free(lay); free(lay);

View File

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

View File

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

View File

@ -238,8 +238,8 @@ evas_object_smart_del(Evas_Object *obj)
Evas_Smart *s; Evas_Smart *s;
s = obj->smart.smart; s = obj->smart.smart;
if (obj->smart.parent) evas_object_smart_member_del(obj);
if ((s) && (s->func_del)) s->func_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); 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); 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); void evas_object_clip_recalc(Evas_Object *obj);
Evas_Layer *evas_layer_new(Evas *e); Evas_Layer *evas_layer_new(Evas *e);
void evas_layer_pre_free(Evas_Layer *lay);
void evas_layer_free(Evas_Layer *lay); void evas_layer_free(Evas_Layer *lay);
Evas_Layer *evas_layer_find(Evas *e, int layer_num); Evas_Layer *evas_layer_find(Evas *e, int layer_num);
void evas_layer_add(Evas_Layer *lay); void evas_layer_add(Evas_Layer *lay);