From 05af27f99945c5c2c993c453196ff7987a97ec33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Briano?= Date: Wed, 17 Dec 2008 14:10:09 +0000 Subject: [PATCH] Guard box from getting into an infinite loop when calculating layout. SVN revision: 38182 --- legacy/evas/src/lib/Evas.h | 1 + legacy/evas/src/lib/canvas/evas_object_box.c | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/legacy/evas/src/lib/Evas.h b/legacy/evas/src/lib/Evas.h index 4eb8a5bf9d..c5fe2175d6 100644 --- a/legacy/evas/src/lib/Evas.h +++ b/legacy/evas/src/lib/Evas.h @@ -1017,6 +1017,7 @@ extern "C" { void *data; void (*free_data)(void *data); } layout; + unsigned char in_calc:1; }; struct _Evas_Object_Box_Option diff --git a/legacy/evas/src/lib/canvas/evas_object_box.c b/legacy/evas/src/lib/canvas/evas_object_box.c index ca9c7f5046..96052d2a97 100644 --- a/legacy/evas/src/lib/canvas/evas_object_box.c +++ b/legacy/evas/src/lib/canvas/evas_object_box.c @@ -37,6 +37,9 @@ static void _on_child_resize(void *data, Evas *evas, Evas_Object *o, void *einfo) { Evas_Object *box = data; + Evas_Object_Box_Data *priv; + priv = evas_object_smart_data_get(box); + if (priv->in_calc) return; evas_object_smart_changed(box); } @@ -378,7 +381,11 @@ _evas_object_box_smart_calculate(Evas_Object *o) { EVAS_OBJECT_BOX_DATA_GET_OR_RETURN(o, priv); if (priv->layout.cb) - priv->layout.cb(o, priv, priv->layout.data); + { + priv->in_calc = 1; + priv->layout.cb(o, priv, priv->layout.data); + priv->in_calc = 0; + } else fprintf(stderr, "ERROR: no layout function set for %p box.\n", o); }