Cleanly handle evas_object_release.

SVN revision: 34841
This commit is contained in:
Cedric BAIL 2008-06-17 09:04:12 +00:00
parent 9fa6620817
commit 3796312acf
1 changed files with 45 additions and 35 deletions

View File

@ -244,53 +244,62 @@ _evas_render_check_pending_objects(Evas_Array *pending_objects, Evas *e)
obj = _evas_array_get(pending_objects, i); obj = _evas_array_get(pending_objects, i);
if (!obj->layer) goto clean_stuff;
evas_object_clip_recalc(obj); evas_object_clip_recalc(obj);
is_active = evas_object_is_active(obj); is_active = evas_object_is_active(obj);
if (!is_active && !obj->is_active && !obj->render_pre && !obj->rect_del) if (!is_active &&
ok = 1; !obj->is_active &&
else !obj->render_pre &&
if (obj->is_active == is_active) !obj->rect_del)
{ {
if (obj->changed) ok = 1;
{ goto clean_stuff;
if (obj->smart.smart) }
if (obj->is_active == is_active)
{
if (obj->changed)
{
if (obj->smart.smart)
{
if (obj->render_pre
|| obj->rect_del)
ok = 1;
}
else
if ((is_active) && (obj->restack) && (!obj->clip.clipees) &&
((evas_object_is_visible(obj) && (!obj->cur.have_clipees)) ||
(evas_object_was_visible(obj) && (!obj->prev.have_clipees))))
{ {
if (obj->render_pre if (!(obj->render_pre
|| obj->rect_del) || obj->rect_del))
ok = 1; ok = 1;
} }
else else
if ((is_active) && (obj->restack) && (!obj->clip.clipees) && if (is_active && (!obj->clip.clipees) &&
((evas_object_is_visible(obj) && (!obj->cur.have_clipees)) || ((evas_object_is_visible(obj) && (!obj->cur.have_clipees)) ||
(evas_object_was_visible(obj) && (!obj->prev.have_clipees)))) (evas_object_was_visible(obj) && (!obj->prev.have_clipees))))
{ {
if (!(obj->render_pre if (obj->render_pre
|| obj->rect_del)) || obj->rect_del)
ok = 1; ok = 1;
} }
else }
if (is_active && (!obj->clip.clipees) && else
((evas_object_is_visible(obj) && (!obj->cur.have_clipees)) || {
(evas_object_was_visible(obj) && (!obj->prev.have_clipees)))) if ((!obj->clip.clipees) && (obj->delete_me == 0) &&
{ (!obj->cur.have_clipees || (evas_object_was_visible(obj) && (!obj->prev.have_clipees)))
if (obj->render_pre && evas_object_is_opaque(obj) && evas_object_is_visible(obj))
|| obj->rect_del) if (obj->rect_del || obj->smart.smart)
ok = 1; {
} ok = 1;
} }
else }
{ }
if ((!obj->clip.clipees) && (obj->delete_me == 0) &&
(!obj->cur.have_clipees || (evas_object_was_visible(obj) && (!obj->prev.have_clipees)))
&& evas_object_is_opaque(obj) && evas_object_is_visible(obj))
if (obj->rect_del || obj->smart.smart)
{
ok = 1;
}
}
}
clean_stuff:
if (!ok) if (!ok)
{ {
evas_array_clean(&e->active_objects); evas_array_clean(&e->active_objects);
@ -311,7 +320,8 @@ Evas_Bool pending_change(void *data, void *gdata)
Evas_Object *obj; Evas_Object *obj;
obj = data; obj = data;
if (obj->delete_me) return 0; if (!obj->layer) obj->changed = 0;
if (obj->delete_me) obj->changed = 0;
return obj->changed; return obj->changed;
} }