From a0601890121019b11f735ce79e67b218185a8f64 Mon Sep 17 00:00:00 2001 From: Kim Shinwoo Date: Tue, 3 Jul 2012 12:09:34 +0000 Subject: [PATCH] From: Kim Shinwoo Subject: [E-devel] [Patch][elm_widget] access hook Real time setting would be necessary in case of running applications which have elm_layout or elm_widget_item. If the access mode does not care of this, running applications should restart. The attached for this. Please review the patch and give any feedbacks. Thanks. SVN revision: 73229 --- legacy/elementary/ChangeLog | 4 ++++ legacy/elementary/src/lib/elm_widget.c | 32 ++++++++++++++++++++++++++ legacy/elementary/src/lib/elm_widget.h | 3 +++ 3 files changed, 39 insertions(+) diff --git a/legacy/elementary/ChangeLog b/legacy/elementary/ChangeLog index 66cb862b49..832b550b75 100644 --- a/legacy/elementary/ChangeLog +++ b/legacy/elementary/ChangeLog @@ -265,3 +265,7 @@ * Add elm_multibuttonentry_editable_set() and elm_multibuttonentry_editable_get() +2012-07-3 Shinwoo Kim (kimcinoo) + + * Add access hook to widget infra. + diff --git a/legacy/elementary/src/lib/elm_widget.c b/legacy/elementary/src/lib/elm_widget.c index cae7440981..57b94dbcce 100644 --- a/legacy/elementary/src/lib/elm_widget.c +++ b/legacy/elementary/src/lib/elm_widget.c @@ -82,6 +82,7 @@ typedef struct _Elm_Widget_Compat_Smart_Data void (*activate)(Evas_Object *obj); void (*disable)(Evas_Object *obj); void (*theme)(Evas_Object *obj); + void (*access)(Evas_Object *obj, Eina_Bool is_access); void (*translate)(Evas_Object *obj); Eina_Bool (*event)(Evas_Object *obj, Evas_Object *source, @@ -1074,6 +1075,16 @@ elm_widget_theme_hook_set(Evas_Object *obj, COMPAT_SMART_DATA(sd)->theme = func; } +EAPI void +elm_widget_access_hook_set(Evas_Object *obj, + void (*func)(Evas_Object *obj, + Eina_Bool is_access)) +{ + API_ENTRY return; + + COMPAT_SMART_DATA(sd)->access = func; +} + EAPI void elm_widget_translate_hook_set(Evas_Object *obj, void (*func)(Evas_Object *obj)) @@ -1186,6 +1197,27 @@ elm_widget_signal_callback_del_hook_set(Evas_Object *obj, COMPAT_SMART_DATA(sd)->callback_del = func; } +EAPI Eina_Bool +elm_widget_access(Evas_Object *obj, Eina_Bool is_access) +{ + const Eina_List *l; + Evas_Object *child; + Eina_Bool ret = EINA_TRUE; + + API_ENTRY return EINA_FALSE; + EINA_LIST_FOREACH(sd->subobjs, l, child) + ret &= elm_widget_access(child, is_access); + + if (_elm_legacy_is(obj) && COMPAT_SMART_DATA(sd)->access) + COMPAT_SMART_DATA(sd)->access(obj, is_access); + else if (sd->api && sd->api->access) + sd->api->access(obj, is_access); + else + return EINA_FALSE; + + return ret; +} + EAPI Eina_Bool elm_widget_theme(Evas_Object *obj) { diff --git a/legacy/elementary/src/lib/elm_widget.h b/legacy/elementary/src/lib/elm_widget.h index 72b6ff6dfb..c85109a631 100644 --- a/legacy/elementary/src/lib/elm_widget.h +++ b/legacy/elementary/src/lib/elm_widget.h @@ -425,6 +425,7 @@ 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 */ } Elm_Widget_Smart_Class; /** @@ -610,12 +611,14 @@ EAPI void elm_widget_focus_hook_set(Evas_Object *obj, void (*func)(E EAPI void elm_widget_activate_hook_set(Evas_Object *obj, void (*func)(Evas_Object *obj)); EAPI void elm_widget_disable_hook_set(Evas_Object *obj, void (*func)(Evas_Object *obj)); EAPI void elm_widget_theme_hook_set(Evas_Object *obj, void (*func)(Evas_Object *obj)); +EAPI void elm_widget_access_hook_set(Evas_Object *obj, void (*func)(Evas_Object *obj, Eina_Bool is_access)); EAPI void elm_widget_translate_hook_set(Evas_Object *obj, void (*func)(Evas_Object *obj)); EAPI void elm_widget_event_hook_set(Evas_Object *obj, Eina_Bool (*func)(Evas_Object *obj, Evas_Object *source, Evas_Callback_Type type, void *event_info)); EAPI void elm_widget_changed_hook_set(Evas_Object *obj, void (*func)(Evas_Object *obj)); EAPI void elm_widget_signal_emit_hook_set(Evas_Object *obj, void (*func)(Evas_Object *obj, const char *emission, const char *source)); EAPI void elm_widget_signal_callback_add_hook_set(Evas_Object *obj, void (*func)(Evas_Object *obj, const char *emission, const char *source, Edje_Signal_Cb func_cb, void *data)); EAPI void elm_widget_signal_callback_del_hook_set(Evas_Object *obj, void (*func)(Evas_Object *obj, const char *emission, const char *source, Edje_Signal_Cb func_cb, void *data)); +EAPI Eina_Bool elm_widget_access(Evas_Object *obj, Eina_Bool is_access); EAPI Eina_Bool elm_widget_theme(Evas_Object *obj); EAPI void elm_widget_theme_specific(Evas_Object *obj, Elm_Theme *th, Eina_Bool force); EAPI void elm_widget_translate(Evas_Object *obj);