oops. on evas_free nested smart objects might just not clean up right.. fix

SVN revision: 7263
This commit is contained in:
Carsten Haitzler 2003-07-30 02:58:10 +00:00
parent 1df7a5135b
commit 84544019f0
4 changed files with 23 additions and 6 deletions

View File

@ -54,7 +54,7 @@ evas_layer_pre_free(Evas_Layer *lay)
Evas_Object *obj;
obj = (Evas_Object *)l;
evas_object_del(obj);
if (!obj->smart.parent) evas_object_del(obj);
}
}

View File

@ -77,17 +77,32 @@ evas_free(Evas *e)
{
Evas_Object_List *l;
int i;
int del = 1;
MAGIC_CHECK(e, Evas, MAGIC_EVAS);
return;
MAGIC_CHECK_END();
for (l = (Evas_Object_List *)(e->layers); l; l = l->next)
while (del != 0)
{
Evas_Layer *lay;
del = 0;
for (l = (Evas_Object_List *)(e->layers); l; l = l->next)
{
Evas_Layer *lay;
Evas_Object_List *ll;
lay = (Evas_Layer *)l;
evas_layer_pre_free(lay);
for (ll = (Evas_Object_List *)lay->objects; ll; ll = ll->next)
{
Evas_Object *o;
o = (Evas_Object *)ll;
if (!o->delete_me)
del += o->delete_me;
}
}
lay = (Evas_Layer *)l;
evas_layer_pre_free(lay);
}
while (e->layers)
{

View File

@ -19,7 +19,6 @@ evas_object_new(void)
void
evas_object_free(Evas_Object *obj, int clean_layer)
{
evas_object_event_callback_call(obj, EVAS_CALLBACK_FREE, NULL);
evas_object_grabs_cleanup(obj);
evas_object_intercept_cleanup(obj);
evas_object_smart_cleanup(obj);
@ -419,6 +418,7 @@ evas_object_del(Evas_Object *obj)
obj->layer->evas->focused = NULL;
evas_object_event_callback_call(obj, EVAS_CALLBACK_FOCUS_OUT, NULL);
}
evas_object_event_callback_call(obj, EVAS_CALLBACK_FREE, NULL);
evas_object_grabs_cleanup(obj);
evas_object_hide(obj);
while (obj->clip.clipees) evas_object_clip_unset(obj->clip.clipees->data);

View File

@ -284,6 +284,7 @@ struct _Evas
Evas_Hash *name_hash;
char changed : 1;
char walking_layers : 1;
int events_frozen;
@ -320,6 +321,7 @@ struct _Evas_Layer
Evas *evas;
void *engine_data;
char delete_me : 1;
};
struct _Evas_Object