forked from enlightenment/efl
* Fixed bug smart calc array where it'd nuke the array when nested
process calls hapen and leave some objects uncalculated, but removed from the array and marked as needing a calc thus never getting back into the array. SVN revision: 57234
This commit is contained in:
parent
94a1ea33fa
commit
62062af8b4
|
@ -120,4 +120,10 @@
|
||||||
|
|
||||||
* Fixed a bug in textblock cursor position with empty textblocks.
|
* Fixed a bug in textblock cursor position with empty textblocks.
|
||||||
|
|
||||||
|
2011-02-22 Carsten Haitzler (The Rasterman)
|
||||||
|
|
||||||
|
* Fixed bug smart calc array where it'd nuke the array when nested
|
||||||
|
process calls hapen and leave some objects uncalculated, but
|
||||||
|
removed from the array and marked as needing a calc thus never
|
||||||
|
getting back into the array.
|
||||||
|
|
||||||
|
|
|
@ -735,8 +735,7 @@ evas_object_smart_need_recalculate_set(Evas_Object *obj, Eina_Bool value)
|
||||||
return;
|
return;
|
||||||
o->need_recalculate = value;
|
o->need_recalculate = value;
|
||||||
|
|
||||||
if (!obj->smart.smart->smart_class->calculate)
|
if (!obj->smart.smart->smart_class->calculate) return;
|
||||||
return;
|
|
||||||
|
|
||||||
/* XXX: objects can be present multiple times in calculate_objects()
|
/* XXX: objects can be present multiple times in calculate_objects()
|
||||||
* XXX: after a set-unset-set cycle, but it's not a problem since
|
* XXX: after a set-unset-set cycle, but it's not a problem since
|
||||||
|
@ -745,8 +744,7 @@ evas_object_smart_need_recalculate_set(Evas_Object *obj, Eina_Bool value)
|
||||||
*/
|
*/
|
||||||
if (o->need_recalculate)
|
if (o->need_recalculate)
|
||||||
{
|
{
|
||||||
Evas *e;
|
Evas *e = obj->layer->evas;
|
||||||
e = obj->layer->evas;
|
|
||||||
eina_array_push(&e->calculate_objects, obj);
|
eina_array_push(&e->calculate_objects, obj);
|
||||||
}
|
}
|
||||||
/* TODO: else, remove from array */
|
/* TODO: else, remove from array */
|
||||||
|
@ -831,17 +829,21 @@ evas_call_smarts_calculate(Evas *e)
|
||||||
{
|
{
|
||||||
Eina_Array *calculate;
|
Eina_Array *calculate;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
static int in_smart_calc = 0;
|
||||||
|
|
||||||
|
in_smart_calc++;
|
||||||
calculate = &e->calculate_objects;
|
calculate = &e->calculate_objects;
|
||||||
for (i = 0; i < calculate->count; ++i)
|
for (i = 0; i < calculate->count; i++)
|
||||||
{
|
{
|
||||||
Evas_Object *obj;
|
Evas_Object *obj;
|
||||||
Evas_Object_Smart *o;
|
Evas_Object_Smart *o;
|
||||||
|
int before;
|
||||||
|
|
||||||
obj = eina_array_data_get(calculate, i);
|
obj = eina_array_data_get(calculate, i);
|
||||||
if (obj->delete_me)
|
if (obj->delete_me)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
before = calculate->count;
|
||||||
o = obj->object_data;
|
o = obj->object_data;
|
||||||
if (o->need_recalculate)
|
if (o->need_recalculate)
|
||||||
{
|
{
|
||||||
|
@ -849,8 +851,8 @@ evas_call_smarts_calculate(Evas *e)
|
||||||
obj->smart.smart->smart_class->calculate(obj);
|
obj->smart.smart->smart_class->calculate(obj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
in_smart_calc--;
|
||||||
eina_array_flush(calculate);
|
if (in_smart_calc == 0) eina_array_flush(calculate);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue