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) evas_object_is_active(Evas_Object *obj)
{ {
if (obj->smart.smart) return 0; 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.w,
obj->layer->evas->output.h) || obj->layer->evas->output.h) ||
evas_object_was_in_output_rect(obj, 0, 0, evas_object_was_in_output_rect(obj, 0, 0,
obj->layer->evas->output.w, obj->layer->evas->output.w,
obj->layer->evas->output.h)) && obj->layer->evas->output.h)))
(evas_object_is_visible(obj) ||
evas_object_was_visible(obj)))
return 1; return 1;
return 0; 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 */ /* build active object list */
if (evas_object_is_active(obj)) if (evas_object_is_active(obj))
*active_objects = evas_list_append(*active_objects, obj); *active_objects = evas_list_append(*active_objects, obj);
/* something changed... maybe... */
if (restack) if (restack)
{ {
obj->restack = 1; obj->restack = 1;
@ -85,6 +84,7 @@ _evas_render_phase1_object_process(Evas *e, Evas_Object *obj, Evas_List **active
{ {
Evas_Object_List *l; Evas_Object_List *l;
obj->func->render_pre(obj);
for (l = obj->smart.contained; l; l = l->next) for (l = obj->smart.contained; l; l = l->next)
{ {
Evas_Object *obj2; Evas_Object *obj2;
@ -94,7 +94,6 @@ _evas_render_phase1_object_process(Evas *e, Evas_Object *obj, Evas_List **active
active_objects, active_objects,
restack_objects, obj->restack); restack_objects, obj->restack);
} }
} }
else else
{ {
@ -105,7 +104,6 @@ _evas_render_phase1_object_process(Evas *e, Evas_Object *obj, Evas_List **active
obj->func->render_pre(obj); obj->func->render_pre(obj);
} }
} }
/* nothing changed at all */
else else
{ {
if ((!obj->clip.clipees) && (obj->delete_me == 0)) 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; Evas_Object_List *l;
obj->func->render_pre(obj);
for (l = obj->smart.contained; l; l = l->next) for (l = obj->smart.contained; l; l = l->next)
{ {
Evas_Object *obj2; 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->cur.cache.clip.h);
} }
} }
obj->restack = 0;
} }
obj->restack = 0;
} }
static void static void
@ -368,22 +367,24 @@ evas_render_updates(Evas *e)
} }
/* if the object is flagged for deletion - note it */ /* if the object is flagged for deletion - note it */
if (obj->delete_me == 2) 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 */ /* delete all objects flagged for deletion now */
while (delete_objects) while (delete_objects)
{ {
Evas_Object *obj; Evas_Object *obj;
obj = (Evas_Object *)(delete_objects->data); 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); 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->changed = 0;
e->viewport.changed = 0; e->viewport.changed = 0;
e->output.changed = 0; e->output.changed = 0;

View File

@ -78,6 +78,7 @@ evas_object_raise(Evas_Object *obj)
} }
obj->restack = 1; obj->restack = 1;
evas_object_change(obj); evas_object_change(obj);
evas_object_inform_call_restack(obj);
if (obj->layer->evas->events_frozen <= 0) if (obj->layer->evas->events_frozen <= 0)
{ {
if (!evas_event_passes_through(obj)) 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; obj->restack = 1;
evas_object_change(obj); evas_object_change(obj);
evas_object_inform_call_restack(obj);
if (obj->layer->evas->events_frozen <= 0) if (obj->layer->evas->events_frozen <= 0)
{ {
if (!evas_event_passes_through(obj)) 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; obj->restack = 1;
evas_object_change(obj); evas_object_change(obj);
evas_object_inform_call_restack(obj);
if (obj->layer->evas->events_frozen <= 0) if (obj->layer->evas->events_frozen <= 0)
{ {
if (!evas_event_passes_through(obj)) 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; obj->restack = 1;
evas_object_change(obj); evas_object_change(obj);
evas_object_inform_call_restack(obj);
if (obj->layer->evas->events_frozen <= 0) if (obj->layer->evas->events_frozen <= 0)
{ {
if (!evas_event_passes_through(obj)) 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);
} }
/** /**