Guard box from getting into an infinite loop when calculating layout.
authorsachiel <sachiel@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 17 Dec 2008 14:10:09 +0000 (14:10 +0000)
committersachiel <sachiel@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 17 Dec 2008 14:10:09 +0000 (14:10 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/evas@38182 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/Evas.h
src/lib/canvas/evas_object_box.c

index 4eb8a5b..c5fe217 100644 (file)
@@ -1017,6 +1017,7 @@ extern "C" {
         void *data;
         void (*free_data)(void *data);
       } layout;
+      unsigned char in_calc:1;
    };
 
    struct _Evas_Object_Box_Option
index ca9c7f5..96052d2 100644 (file)
@@ -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);
 }