From 300c7b814c7cb6a90ca9f79461406786821a9216 Mon Sep 17 00:00:00 2001 From: Gustavo Sverzut Barbieri Date: Sun, 14 Dec 2008 16:30:29 +0000 Subject: [PATCH] try to avoid infinite recalc loop. as reported, elicity triggers an infinite loop by calling edje_object_part_geometry_get(), which in turns calls _edje_recalc_do() which in turns calls the elicit code that requests edje_object_part_geometry_get() and since it's still marked as "dirty", it enters the loop... the real fix is just the move of ed->dirty = 0; before calling recalcs, but I also unmarked object as need_recalculate so we can even avoid requesting object to recalculate from evas. SVN revision: 38139 --- legacy/edje/src/lib/edje_calc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/legacy/edje/src/lib/edje_calc.c b/legacy/edje/src/lib/edje_calc.c index 3ad853ef01..153632be06 100644 --- a/legacy/edje/src/lib/edje_calc.c +++ b/legacy/edje/src/lib/edje_calc.c @@ -157,10 +157,12 @@ _edje_recalc_do(Edje *ed) int i; ed->postponed = 0; + evas_object_smart_need_recalculate_set(ed->obj, 0); if (!ed->dirty) { return; } + ed->dirty = 0; for (i = 0; i < ed->table_parts_size; i++) { Edje_Real_Part *ep; @@ -178,7 +180,6 @@ _edje_recalc_do(Edje *ed) _edje_part_recalc(ed, ep, (~ep->calculated) & FLAG_XY); } if (!ed->calc_only) ed->recalc = 0; - ed->dirty = 0; ed->calc_only = 0; }