From 741fc0e81e431509bd9ba42c707dd99fba0570ee Mon Sep 17 00:00:00 2001 From: Shinwoo Kim Date: Wed, 3 Apr 2013 21:46:06 +0900 Subject: [PATCH] [access] support back gesture --- src/lib/elc_naviframe.c | 18 ++++++++++++++++++ src/lib/elm_access.c | 34 +++++++++++++++++++++++++++------- src/lib/elm_access.h | 3 +++ src/lib/elm_scroller.c | 3 ++- src/lib/elm_widget.h | 3 ++- src/lib/elm_win.c | 12 +++++++++++- 6 files changed, 63 insertions(+), 10 deletions(-) diff --git a/src/lib/elc_naviframe.c b/src/lib/elc_naviframe.c index 7c25682..3a58150 100644 --- a/src/lib/elc_naviframe.c +++ b/src/lib/elc_naviframe.c @@ -1371,6 +1371,23 @@ _elm_naviframe_smart_event(Evas_Object *obj, return EINA_TRUE; } +static Eina_Bool +_elm_naviframe_smart_activate(Evas_Object *obj, Elm_Activate act) +{ + Elm_Naviframe_Item *it; + + if (act != ELM_ACTIVATE_BACK) return EINA_FALSE; + if (elm_widget_disabled_get(obj)) return EINA_FALSE; + + it = (Elm_Naviframe_Item *)elm_naviframe_top_item_get(obj); + if (!it) return EINA_FALSE; + + if (it->title_prev_btn) + evas_object_smart_callback_call(it->title_prev_btn, SIG_CLICKED, NULL); + + return EINA_TRUE; +} + static void _elm_naviframe_smart_set_user(Elm_Naviframe_Smart_Class *sc) { @@ -1382,6 +1399,7 @@ _elm_naviframe_smart_set_user(Elm_Naviframe_Smart_Class *sc) ELM_WIDGET_CLASS(sc)->focus_direction = _elm_naviframe_smart_focus_direction; ELM_WIDGET_CLASS(sc)->access = _elm_naviframe_smart_access; ELM_WIDGET_CLASS(sc)->event = _elm_naviframe_smart_event; + ELM_WIDGET_CLASS(sc)->activate = _elm_naviframe_smart_activate; ELM_CONTAINER_CLASS(sc)->content_set = _elm_naviframe_smart_content_set; ELM_CONTAINER_CLASS(sc)->content_get = _elm_naviframe_smart_content_get; diff --git a/src/lib/elm_access.c b/src/lib/elm_access.c index 6cf2d32..f72f897 100644 --- a/src/lib/elm_access.c +++ b/src/lib/elm_access.c @@ -77,6 +77,10 @@ _elm_access_smart_activate(Evas_Object *obj, Elm_Activate act) case ELM_ACTIVATE_LEFT: break; + case ELM_ACTIVATE_BACK: + type = ELM_ACCESS_ACTION_BACK; + break; + default: break; } @@ -686,17 +690,32 @@ _elm_access_activate_callback_set(Elm_Access_Info *ac, EAPI void _elm_access_highlight_object_activate(Evas_Object *obj, Elm_Activate act) { - Evas_Object *highlight; + Evas_Object *ho; - highlight = _access_highlight_object_get(obj); - if (!highlight) return; + ho = _access_highlight_object_get(obj); + if (!ho) return; - _elm_access_read_mode_set(EINA_FALSE); + switch (act) + { + case ELM_ACTIVATE_DEFAULT: + case ELM_ACTIVATE_UP: + case ELM_ACTIVATE_DOWN: + _elm_access_read_mode_set(EINA_FALSE); + + if (!elm_object_focus_get(ho)) + elm_object_focus_set(ho, EINA_TRUE); - if (!elm_object_focus_get(highlight)) - elm_object_focus_set(highlight, EINA_TRUE); + elm_widget_activate(ho, act); + break; + + case ELM_ACTIVATE_BACK: + elm_widget_activate(ho, act); + break; + + default: + break; + } - elm_widget_activate(highlight, act); return; } @@ -1313,6 +1332,7 @@ elm_access_action(Evas_Object *obj, const Elm_Access_Action_Type type, void *act break; case ELM_ACCESS_ACTION_SCROLL: + _elm_access_highlight_object_scroll(obj, a->mouse_type, a->x, a->y); break; case ELM_ACCESS_ACTION_BACK: diff --git a/src/lib/elm_access.h b/src/lib/elm_access.h index 3be938c..667b18b 100644 --- a/src/lib/elm_access.h +++ b/src/lib/elm_access.h @@ -69,6 +69,9 @@ struct _Elm_Access_Action_Info { Evas_Coord x; Evas_Coord y; + unsigned int mouse_type; /* 0: mouse down + 1: mouse move + 2: mouse up */ Elm_Access_Action_Type action_type; Eina_Bool highlight_cycle : 1; diff --git a/src/lib/elm_scroller.c b/src/lib/elm_scroller.c index ef4079e..5cd8c04 100644 --- a/src/lib/elm_scroller.c +++ b/src/lib/elm_scroller.c @@ -268,7 +268,8 @@ _elm_scroller_smart_activate(Evas_Object *obj, Elm_Activate act) ELM_SCROLLER_DATA_GET(obj, sd); if ((elm_widget_disabled_get(obj)) || - (act == ELM_ACTIVATE_DEFAULT)) return EINA_FALSE; + (act == ELM_ACTIVATE_DEFAULT) || + (act == ELM_ACTIVATE_BACK)) return EINA_FALSE; sd->s_iface->content_pos_get(obj, &x, &y); sd->s_iface->page_size_get(obj, &page_x, &page_y); diff --git a/src/lib/elm_widget.h b/src/lib/elm_widget.h index 1cacf2c..713f831 100644 --- a/src/lib/elm_widget.h +++ b/src/lib/elm_widget.h @@ -397,7 +397,8 @@ typedef enum ELM_ACTIVATE_UP, ELM_ACTIVATE_DOWN, ELM_ACTIVATE_RIGHT, - ELM_ACTIVATE_LEFT + ELM_ACTIVATE_LEFT, + ELM_ACTIVATE_BACK } Elm_Activate; /* Please, ALWAYS update the ELM_WIDGET_SMART_CLASS_INIT macro diff --git a/src/lib/elm_win.c b/src/lib/elm_win.c index c96d26b..a141514 100755 --- a/src/lib/elm_win.c +++ b/src/lib/elm_win.c @@ -1961,7 +1961,7 @@ _elm_win_client_message(void *data, void *event) { Elm_Access_Action_Info *a; - Ecore_X_Atom atom_scroll; + Ecore_X_Atom atom_scroll, atom_back, atom_control_panel_open; Elm_Win_Smart_Data *sd = data; Ecore_X_Event_Client_Message *e = event; @@ -2000,6 +2000,8 @@ _elm_win_client_message(void *data, if ((unsigned int)e->data.l[0] == sd->x.xwin) { atom_scroll = ecore_x_atom_get("_E_MOD_SCREEN_READER_ACTION_SCROLL_"); + atom_back = ecore_x_atom_get("_E_MOD_SCREEN_READER_ACTION_BACK_"); + atom_control_panel_open = ecore_x_atom_get("_E_MOD_SCREEN_READER_ACTION_CONTROL_PANEL_OPEN_"); if ((unsigned int)e->data.l[1] == ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_NEXT) @@ -2058,6 +2060,14 @@ _elm_win_client_message(void *data, _elm_access_highlight_object_scroll(ELM_WIDGET_DATA(sd)->obj, e->data.l[2], e->data.l[3], e->data.l[4]); } + else if ((unsigned int)e->data.l[1] == atom_back) + { + _elm_access_highlight_object_activate + (ELM_WIDGET_DATA(sd)->obj, ELM_ACTIVATE_BACK); + } + else if ((unsigned int)e->data.l[1] == atom_control_panel_open) + { + } } } return ECORE_CALLBACK_PASS_ON; -- 2.7.4