From 68f1a20306ece55a60e4c864558fac33585e7992 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Briano?= Date: Tue, 21 Sep 2010 14:04:28 +0000 Subject: [PATCH] Adding callback for box to be called when a child is added or removed. Also sets the children_changed flag when changing children list. by Otavio Pontes SVN revision: 52541 --- legacy/evas/src/lib/Evas.h | 1 + legacy/evas/src/lib/canvas/evas_object_box.c | 25 ++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/legacy/evas/src/lib/Evas.h b/legacy/evas/src/lib/Evas.h index bceb764749..f6d714ad86 100644 --- a/legacy/evas/src/lib/Evas.h +++ b/legacy/evas/src/lib/Evas.h @@ -1987,6 +1987,7 @@ struct _Evas_Smart_Cb_Description void (*free_data)(void *data); } layout; Eina_Bool layouting : 1; + Eina_Bool children_changed : 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 4a5e667767..b5b65481d1 100644 --- a/legacy/evas/src/lib/canvas/evas_object_box.c +++ b/legacy/evas/src/lib/canvas/evas_object_box.c @@ -25,6 +25,13 @@ struct _Evas_Object_Box_Accessor */ static const char _evas_object_box_type[] = "Evas_Object_Box"; +static const char SIG_CHILD_ADDED[] = "child,added"; +static const char SIG_CHILD_REMOVED[] = "child,removed"; +static const Evas_Smart_Cb_Description _signals[] = { + {SIG_CHILD_ADDED, ""}, + {SIG_CHILD_REMOVED, ""}, + {NULL, NULL} +}; static void _sizing_eval(Evas_Object *obj); @@ -237,6 +244,8 @@ _evas_object_box_append_default(Evas_Object *o, Evas_Object_Box_Data *priv, Evas return NULL; priv->children = eina_list_append(priv->children, opt); + priv->children_changed = EINA_TRUE; + evas_object_smart_callback_call(o, SIG_CHILD_ADDED, opt); return opt; } @@ -251,6 +260,8 @@ _evas_object_box_prepend_default(Evas_Object *o, Evas_Object_Box_Data *priv, Eva return NULL; priv->children = eina_list_prepend(priv->children, opt); + priv->children_changed = EINA_TRUE; + evas_object_smart_callback_call(o, SIG_CHILD_ADDED, opt); return opt; } @@ -273,6 +284,8 @@ _evas_object_box_insert_before_default(Evas_Object *o, Evas_Object_Box_Data *pri priv->children = eina_list_prepend_relative (priv->children, new_opt, opt); + priv->children_changed = EINA_TRUE; + evas_object_smart_callback_call(o, SIG_CHILD_ADDED, new_opt); return new_opt; } } @@ -298,6 +311,8 @@ _evas_object_box_insert_after_default(Evas_Object *o, Evas_Object_Box_Data *priv priv->children = eina_list_append_relative (priv->children, new_opt, opt); + priv->children_changed = EINA_TRUE; + evas_object_smart_callback_call(o, SIG_CHILD_ADDED, new_opt); return new_opt; } } @@ -320,6 +335,8 @@ _evas_object_box_insert_at_default(Evas_Object *o, Evas_Object_Box_Data *priv, E return NULL; priv->children = eina_list_prepend(priv->children, new_opt); + priv->children_changed = EINA_TRUE; + evas_object_smart_callback_call(o, SIG_CHILD_ADDED, new_opt); return new_opt; } @@ -337,6 +354,8 @@ _evas_object_box_insert_at_default(Evas_Object *o, Evas_Object_Box_Data *priv, E priv->children = eina_list_prepend_relative (priv->children, new_opt, opt); + priv->children_changed = EINA_TRUE; + evas_object_smart_callback_call(o, SIG_CHILD_ADDED, new_opt); return new_opt; } } @@ -368,6 +387,8 @@ _evas_object_box_remove_default(Evas_Object *o, Evas_Object_Box_Data *priv, Evas { priv->children = eina_list_remove(priv->children, opt); api->option_free(o, priv, opt); + priv->children_changed = EINA_TRUE; + evas_object_smart_callback_call(o, SIG_CHILD_REMOVED, obj); return obj; } @@ -405,6 +426,8 @@ _evas_object_box_remove_at_default(Evas_Object *o, Evas_Object_Box_Data *priv, u priv->children = eina_list_remove_list(priv->children, node); api->option_free(o, priv, opt); + priv->children_changed = EINA_TRUE; + evas_object_smart_callback_call(o, SIG_CHILD_REMOVED, obj); return obj; } @@ -497,6 +520,7 @@ _evas_object_box_smart_calculate(Evas_Object *o) priv->layouting = 1; priv->layout.cb(o, priv, priv->layout.data); priv->layouting = 0; + priv->children_changed = EINA_FALSE; } else ERR("No layout function set for %p box.", o); @@ -509,6 +533,7 @@ _evas_object_box_smart_set_user(Evas_Object_Box_Api *api) api->base.del = _evas_object_box_smart_del; api->base.resize = _evas_object_box_smart_resize; api->base.calculate = _evas_object_box_smart_calculate; + api->base.callbacks = _signals; api->append = _evas_object_box_append_default; api->prepend = _evas_object_box_prepend_default;