[access] support back gesture
authorShinwoo Kim <cinoo.kim@samsung.com>
Wed, 3 Apr 2013 12:46:06 +0000 (21:46 +0900)
committerSungho Kwak <sungho1.kwak@samsung.com>
Thu, 4 Apr 2013 08:18:40 +0000 (17:18 +0900)
src/lib/elc_naviframe.c
src/lib/elm_access.c
src/lib/elm_access.h
src/lib/elm_scroller.c
src/lib/elm_widget.h
src/lib/elm_win.c

index 7c25682..3a58150 100644 (file)
@@ -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;
index 6cf2d32..f72f897 100644 (file)
@@ -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:
index 3be938c..667b18b 100644 (file)
@@ -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;
index ef4079e..5cd8c04 100644 (file)
@@ -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);
index 1cacf2c..713f831 100644 (file)
@@ -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
index c96d26b..a141514 100755 (executable)
@@ -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;