From: barbieri Date: Sun, 14 Dec 2008 16:30:29 +0000 (+0000) Subject: try to avoid infinite recalc loop. X-Git-Tag: 2.0_alpha~163^2~969 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=084b3121756a4cef3f9db2515dcae1f7600ced03;p=framework%2Fuifw%2Fedje.git 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. git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/edje@38139 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- diff --git a/src/lib/edje_calc.c b/src/lib/edje_calc.c index 3ad853e..153632b 100644 --- a/src/lib/edje_calc.c +++ b/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; }