From 2498091c25fda0738d59c344827f8c8c240558f1 Mon Sep 17 00:00:00 2001 From: Gustavo Lima Chaves Date: Wed, 18 Jul 2012 21:03:28 +0000 Subject: [PATCH] [elm] New infra to help factorize initting code for widgets. Some of them have initting code using the parent ptr for some logic. Now there's a new idiom on instantiating widgets which adresses that. It'll be used for all widgets from now on. SVN revision: 74147 --- src/lib/elm_widget.c | 29 ++++++++++++++++++++++++++++- src/lib/elm_widget.h | 13 +++++++++---- 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/src/lib/elm_widget.c b/src/lib/elm_widget.c index d84748c..c018828 100644 --- a/src/lib/elm_widget.c +++ b/src/lib/elm_widget.c @@ -922,6 +922,33 @@ elm_widget_smart_class_get(void) return class; } +EAPI Evas_Object * +elm_widget_add(Evas_Smart *smart, + Evas_Object *parent) +{ + Evas *e; + Evas_Object *o; + + e = evas_object_evas_get(parent); + if (!e) return NULL; + + o = evas_object_smart_add(e, smart); + elm_widget_parent_set(o, parent); + + return o; +} + +EAPI void +elm_widget_parent_set(Evas_Object *obj, + Evas_Object *parent) +{ + ELM_WIDGET_DATA_GET(obj, sd); + + if (!sd->api->parent_set) return; + + sd->api->parent_set(obj, parent); +} + EAPI void elm_widget_type_register(const char **ptr) { @@ -1018,7 +1045,7 @@ _elm_widget_compat_smart_set_user(Elm_Widget_Compat_Smart_Class *sc) } EAPI Evas_Object * -elm_widget_add(Evas *evas) +elm_widget_compat_add(Evas *evas) { return evas_object_smart_add(evas, _elm_widget_compat_smart_class_new()); } diff --git a/src/lib/elm_widget.h b/src/lib/elm_widget.h index 37b4ca0..faefc39 100644 --- a/src/lib/elm_widget.h +++ b/src/lib/elm_widget.h @@ -356,7 +356,7 @@ */ #define ELM_WIDGET_SMART_CLASS_INIT(smart_class_init) \ {smart_class_init, ELM_WIDGET_SMART_CLASS_VERSION, NULL, NULL, NULL, NULL, \ - NULL, NULL, NULL, NULL, NULL, NULL} + NULL, NULL, NULL, NULL, NULL, NULL, NULL} /** * @def ELM_WIDGET_SMART_CLASS_INIT_NULL @@ -406,6 +406,8 @@ typedef struct _Elm_Widget_Smart_Class Evas_Smart_Class base; /**< Base smart class struct, needed for all smart objects */ int version; /**< Version of this smart class definition */ + void (*parent_set)(Evas_Object *obj, + Evas_Object *parent); /**< 'Virtual' function handling parent widget attachment to new object */ Eina_Bool (*on_focus)(Evas_Object *obj); /**< 'Virtual' function handling receipt of focus on the widget */ Eina_Bool (*disable)(Evas_Object *obj); /**< 'Virtual' function on the widget being disabled */ Eina_Bool (*theme)(Evas_Object *obj); /**< 'Virtual' function on the widget being re-themed */ @@ -428,7 +430,8 @@ typedef struct _Elm_Widget_Smart_Class Eina_Bool (*sub_object_del)(Evas_Object *obj, Evas_Object *sobj); /**< 'Virtual' function handling sub objects being removed */ - void (*access)(Evas_Object *obj, Eina_Bool is_access); /**< 'Virtual' function on the widget being set access */ + void (*access)(Evas_Object *obj, + Eina_Bool is_access); /**< 'Virtual' function on the widget being set access */ } Elm_Widget_Smart_Class; /** @@ -613,8 +616,10 @@ struct _Elm_Object_Item #define ELM_NEW(t) calloc(1, sizeof(t)) +EAPI Evas_Object *elm_widget_add(Evas_Smart *, Evas_Object *); +EAPI void elm_widget_parent_set(Evas_Object *, Evas_Object *); EAPI Eina_Bool elm_widget_api_check(int ver); -EAPI Evas_Object *elm_widget_add(Evas *evas); +EAPI Evas_Object *elm_widget_compat_add(Evas *evas); EAPI void elm_widget_del_hook_set(Evas_Object *obj, void (*func)(Evas_Object *obj)); EAPI void elm_widget_del_pre_hook_set(Evas_Object *obj, void (*func)(Evas_Object *obj)); EAPI void elm_widget_focus_hook_set(Evas_Object *obj, void (*func)(Evas_Object *obj)); @@ -1059,7 +1064,7 @@ EAPI void elm_widget_tree_dot_dump(const Evas_Object *top, FILE *out EINA_SAFETY_ON_NULL_RETURN_VAL((par), (ret)); \ evas = evas_object_evas_get(par); if (!(evas)) return (ret); \ wdat = ELM_NEW(wdtype); if (!(wdat)) return (ret); \ - ob = elm_widget_add(evas); if (!(ob)) { free(wdat); return (ret); } \ + ob = elm_widget_compat_add(evas); if (!(ob)) { free(wdat); return (ret); } \ } while (0) #define ELM_OBJ_ITEM_CHECK_OR_RETURN(it, ...) \ -- 2.7.4