diff --git a/legacy/elementary/ChangeLog b/legacy/elementary/ChangeLog index ad0e8fde3d..e9734f8a9e 100644 --- a/legacy/elementary/ChangeLog +++ b/legacy/elementary/ChangeLog @@ -442,3 +442,8 @@ * Fix re-order animation when it doesn't end correctly. * Improve elm map module loading to onlt init the module needed when searching and not all modules. + +2012-09-03 Shinwoo Kim (kimcinoo) + + * Add in more access subsystem features like activation cb. + diff --git a/legacy/elementary/src/lib/elm_access.c b/legacy/elementary/src/lib/elm_access.c index 4fcf0875df..2cb95cefc5 100644 --- a/legacy/elementary/src/lib/elm_access.c +++ b/legacy/elementary/src/lib/elm_access.c @@ -290,6 +290,29 @@ _elm_access_on_highlight_hook_set(Elm_Access_Info *ac, ac->on_highlight_data = data; } +EAPI void +_elm_access_activate_hook_set(Elm_Access_Info *ac, + Elm_Access_Activate_Cb func, + void *data) +{ + if (!ac) return; + ac->activate = func; + ac->activate_data = data; +} + +EAPI void +_elm_access_highlight_object_activate(Evas_Object *obj) +{ + Evas_Object *highlight_obj; + highlight_obj = elm_widget_focused_object_get(obj); + + Elm_Access_Info *ac = evas_object_data_get(highlight_obj, "_elm_access"); + if (!ac) return; + + if (ac->activate) + ac->activate(highlight_obj, ac->activate_data); +} + EAPI char * _elm_access_text_get(const Elm_Access_Info *ac, int type, Evas_Object *obj, Elm_Widget_Item *item) { diff --git a/legacy/elementary/src/lib/elm_button.c b/legacy/elementary/src/lib/elm_button.c index c47dafffb1..12a88cdbe9 100644 --- a/legacy/elementary/src/lib/elm_button.c +++ b/legacy/elementary/src/lib/elm_button.c @@ -257,6 +257,13 @@ _access_state_cb(void *data __UNUSED__, return NULL; } +static void +_access_activate_cb(Evas_Object *obj, void *data __UNUSED__) +{ + evas_object_smart_callback_call(obj, SIG_CLICKED, NULL); + elm_layout_signal_emit(obj, "elm,anim,activate", "elm"); +} + static void _elm_button_smart_add(Evas_Object *obj) { @@ -281,6 +288,8 @@ _elm_button_smart_add(Evas_Object *obj) (_elm_access_object_get(obj), ELM_ACCESS_INFO, _access_info_cb, NULL); _elm_access_callback_set (_elm_access_object_get(obj), ELM_ACCESS_STATE, _access_state_cb, priv); + _elm_access_activate_hook_set + (_elm_access_object_get(obj), _access_activate_cb, NULL); elm_widget_can_focus_set(obj, EINA_TRUE); diff --git a/legacy/elementary/src/lib/elm_widget.h b/legacy/elementary/src/lib/elm_widget.h index c86319b723..86fe1fe395 100644 --- a/legacy/elementary/src/lib/elm_widget.h +++ b/legacy/elementary/src/lib/elm_widget.h @@ -546,6 +546,7 @@ typedef Eina_Bool (*Elm_Widget_Del_Pre_Cb)(void *data); typedef char *(*Elm_Access_Content_Cb)(void *data, Evas_Object *obj, Elm_Widget_Item *item); typedef void (*Elm_Access_On_Highlight_Cb)(void *data); +typedef void (*Elm_Access_Activate_Cb)(Evas_Object *obj, void *data); struct _Elm_Access_Item { @@ -561,6 +562,8 @@ struct _Elm_Access_Info Ecore_Timer *delay_timer; void *on_highlight_data; Elm_Access_On_Highlight_Cb on_highlight; + void *activate_data; + Elm_Access_Activate_Cb activate; }; EAPI void _elm_access_clear(Elm_Access_Info *ac); @@ -583,6 +586,8 @@ EAPI Evas_Object * _elm_access_edje_object_part_object_register(Evas_Object * EAPI void _elm_access_widget_item_register(Elm_Widget_Item *item); EAPI void _elm_access_widget_item_unregister(Elm_Widget_Item *item); EAPI void _elm_access_on_highlight_hook_set(Elm_Access_Info *ac, Elm_Access_On_Highlight_Cb func, void *data); +EAPI void _elm_access_activate_hook_set(Elm_Access_Info *ac, Elm_Access_Activate_Cb func, void *data); +EAPI void _elm_access_highlight_object_activate(Evas_Object *obj); /**< put this as the first member in your widget item struct */ #define ELM_WIDGET_ITEM Elm_Widget_Item base diff --git a/legacy/elementary/src/lib/elm_win.c b/legacy/elementary/src/lib/elm_win.c index e1a9745b81..45d9363199 100644 --- a/legacy/elementary/src/lib/elm_win.c +++ b/legacy/elementary/src/lib/elm_win.c @@ -1857,7 +1857,7 @@ _elm_win_client_message(void *data, else if ((unsigned int)e->data.l[1] == ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_ACTIVATE) { - // XXX: call right access func + _elm_access_highlight_object_activate(ELM_WIDGET_DATA(sd)->obj); } else if ((unsigned int)e->data.l[1] == ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_READ)