fix restack draw bug

SVN revision: 18005
This commit is contained in:
Carsten Haitzler 2005-10-27 04:25:30 +00:00
parent 208de4897a
commit bc6ba3ab34
3 changed files with 20 additions and 19 deletions

View File

@ -296,14 +296,14 @@ int
evas_object_is_active(Evas_Object *obj)
{
if (obj->smart.smart) return 0;
if ((evas_object_is_in_output_rect(obj, 0, 0,
if ((evas_object_is_visible(obj) ||
evas_object_was_visible(obj)) &&
(evas_object_is_in_output_rect(obj, 0, 0,
obj->layer->evas->output.w,
obj->layer->evas->output.h) ||
evas_object_was_in_output_rect(obj, 0, 0,
obj->layer->evas->output.w,
obj->layer->evas->output.h)) &&
(evas_object_is_visible(obj) ||
evas_object_was_visible(obj)))
obj->layer->evas->output.h)))
return 1;
return 0;
}

View File

@ -73,7 +73,6 @@ _evas_render_phase1_object_process(Evas *e, Evas_Object *obj, Evas_List **active
/* build active object list */
if (evas_object_is_active(obj))
*active_objects = evas_list_append(*active_objects, obj);
/* something changed... maybe... */
if (restack)
{
obj->restack = 1;
@ -85,6 +84,7 @@ _evas_render_phase1_object_process(Evas *e, Evas_Object *obj, Evas_List **active
{
Evas_Object_List *l;
obj->func->render_pre(obj);
for (l = obj->smart.contained; l; l = l->next)
{
Evas_Object *obj2;
@ -94,7 +94,6 @@ _evas_render_phase1_object_process(Evas *e, Evas_Object *obj, Evas_List **active
active_objects,
restack_objects, obj->restack);
}
}
else
{
@ -105,7 +104,6 @@ _evas_render_phase1_object_process(Evas *e, Evas_Object *obj, Evas_List **active
obj->func->render_pre(obj);
}
}
/* nothing changed at all */
else
{
if ((!obj->clip.clipees) && (obj->delete_me == 0))
@ -114,6 +112,7 @@ _evas_render_phase1_object_process(Evas *e, Evas_Object *obj, Evas_List **active
{
Evas_Object_List *l;
obj->func->render_pre(obj);
for (l = obj->smart.contained; l; l = l->next)
{
Evas_Object *obj2;
@ -136,8 +135,8 @@ _evas_render_phase1_object_process(Evas *e, Evas_Object *obj, Evas_List **active
obj->cur.cache.clip.h);
}
}
obj->restack = 0;
}
obj->restack = 0;
}
static void
@ -368,22 +367,24 @@ evas_render_updates(Evas *e)
}
/* if the object is flagged for deletion - note it */
if (obj->delete_me == 2)
delete_objects = evas_list_append(delete_objects, obj);
if (obj->delete_me) obj->delete_me ++;
{
delete_objects = evas_list_append(delete_objects, obj);
}
else if (obj->delete_me != 0) obj->delete_me++;
}
/* free our obscuring object list */
evas_list_free(obscuring_objects_orig);
/* free our active object list */
evas_list_free(active_objects);
/* delete all objects flagged for deletion now */
while (delete_objects)
{
Evas_Object *obj;
obj = (Evas_Object *)(delete_objects->data);
delete_objects = evas_list_remove(delete_objects, obj);
delete_objects = evas_list_remove_list(delete_objects, delete_objects);
evas_object_free(obj, 1);
}
/* free our obscuring object list */
evas_list_free(obscuring_objects_orig);
/* free our active object list */
evas_list_free(active_objects);
e->changed = 0;
e->viewport.changed = 0;
e->output.changed = 0;

View File

@ -78,6 +78,7 @@ evas_object_raise(Evas_Object *obj)
}
obj->restack = 1;
evas_object_change(obj);
evas_object_inform_call_restack(obj);
if (obj->layer->evas->events_frozen <= 0)
{
if (!evas_event_passes_through(obj))
@ -96,7 +97,6 @@ evas_object_raise(Evas_Object *obj)
}
}
}
evas_object_inform_call_restack(obj);
}
/**
@ -137,6 +137,7 @@ evas_object_lower(Evas_Object *obj)
}
obj->restack = 1;
evas_object_change(obj);
evas_object_inform_call_restack(obj);
if (obj->layer->evas->events_frozen <= 0)
{
if (!evas_event_passes_through(obj))
@ -155,7 +156,6 @@ evas_object_lower(Evas_Object *obj)
}
}
}
evas_object_inform_call_restack(obj);
}
/**
@ -213,6 +213,7 @@ evas_object_stack_above(Evas_Object *obj, Evas_Object *above)
}
obj->restack = 1;
evas_object_change(obj);
evas_object_inform_call_restack(obj);
if (obj->layer->evas->events_frozen <= 0)
{
if (!evas_event_passes_through(obj))
@ -231,7 +232,6 @@ evas_object_stack_above(Evas_Object *obj, Evas_Object *above)
}
}
}
evas_object_inform_call_restack(obj);
}
/**
@ -289,6 +289,7 @@ evas_object_stack_below(Evas_Object *obj, Evas_Object *below)
}
obj->restack = 1;
evas_object_change(obj);
evas_object_inform_call_restack(obj);
if (obj->layer->evas->events_frozen <= 0)
{
if (!evas_event_passes_through(obj))
@ -307,7 +308,6 @@ evas_object_stack_below(Evas_Object *obj, Evas_Object *below)
}
}
}
evas_object_inform_call_restack(obj);
}
/**