atspi: expose highlight information on atspi 55/65255/2
authorLukasz Stanislawski <l.stanislaws@samsung.com>
Fri, 17 Jul 2015 15:23:27 +0000 (17:23 +0200)
committerPrasoon Singh <prasoon.16@samsung.com>
Tue, 19 Apr 2016 11:21:37 +0000 (16:51 +0530)
Change-Id: I6a79016c1fbd8c1228eb974cfb842ab0eb0d0d3f

src/lib/elm_access.c
src/lib/elm_colorselector.c
src/lib/elm_gengrid.c
src/lib/elm_genlist.c
src/lib/elm_interface_atspi_accessible.h
src/lib/elm_list.c
src/lib/elm_toolbar.c
src/lib/elm_widget.c
src/lib/elm_widget.h

index b33bec6..7866154 100644 (file)
@@ -1484,6 +1484,9 @@ _elm_access_elm_interface_atspi_component_highlight_grab(Eo *obj, void *pd EINA_
    if (!_access_action_callback_call(obj, ELM_ACCESS_ACTION_HIGHLIGHT, NULL))
      eo_do_super(obj, ELM_ACCESS_CLASS, elm_interface_atspi_component_highlight_grab());
 
+///TIZEN_ONLY(20170717) : expose highlight information on atspi
+   elm_interface_atspi_accessible_state_changed_signal_emit(obj, ELM_ATSPI_STATE_HIGHLIGHTED, EINA_TRUE);
+///
    return EINA_TRUE;
 }
 
@@ -1493,6 +1496,9 @@ _elm_access_elm_interface_atspi_component_highlight_clear(Eo *obj, void *pd EINA
    if (!_access_action_callback_call(obj, ELM_ACCESS_ACTION_UNHIGHLIGHT, NULL))
      eo_do_super(obj, ELM_ACCESS_CLASS, elm_interface_atspi_component_highlight_clear());
 
+///TIZEN_ONLY(20170717) : expose highlight information on atspi
+   elm_interface_atspi_accessible_state_changed_signal_emit(obj, ELM_ATSPI_STATE_HIGHLIGHTED, EINA_FALSE);
+///
    return EINA_TRUE;
 }
 
index e6df91e..f09f8e8 100644 (file)
@@ -2441,6 +2441,9 @@ _elm_color_item_elm_interface_atspi_component_highlight_grab(Eo *eo_it, Elm_Colo
    elm_genlist_item_show(eo_it, ELM_GENLIST_ITEM_SCROLLTO_IN);
 
    elm_object_accessibility_highlight_set(VIEW(it), EINA_TRUE);
+///TIZEN_ONLY(20170717) : expose highlight information on atspi
+   elm_interface_atspi_accessible_state_changed_signal_emit(eo_it, ELM_ATSPI_STATE_HIGHLIGHTED, EINA_TRUE);
+///
 
    return EINA_TRUE;
 }
@@ -2449,6 +2452,9 @@ EOLIAN static Eina_Bool
 _elm_color_item_elm_interface_atspi_component_highlight_clear(Eo *eo_it EINA_UNUSED, Elm_Color_Item_Data *it)
 {
    elm_object_accessibility_highlight_set(VIEW(it), EINA_FALSE);
+///TIZEN_ONLY(20170717) : expose highlight information on atspi
+   elm_interface_atspi_accessible_state_changed_signal_emit(eo_it, ELM_ATSPI_STATE_HIGHLIGHTED, EINA_FALSE);
+///
 
    return EINA_TRUE;
 }
index e2ce932..57d8cee 100644 (file)
@@ -5593,6 +5593,9 @@ _elm_gengrid_item_elm_interface_atspi_component_highlight_grab(Eo *eo_it, Elm_Ge
    elm_gengrid_item_show(eo_it, ELM_GENGRID_ITEM_SCROLLTO_IN);
 
    elm_object_accessibility_highlight_set(VIEW(it), EINA_TRUE);
+///TIZEN_ONLY(20170717) : expose highlight information on atspi
+   eo_do(WIDGET(it), eo_event_callback_call(ELM_INTERFACE_ATSPI_ACCESSIBLE_EVENT_ACTIVE_DESCENDANT_CHANGED, eo_it));
+///
 
    return EINA_TRUE;
 }
@@ -5601,6 +5604,9 @@ EOLIAN static Eina_Bool
 _elm_gengrid_item_elm_interface_atspi_component_highlight_clear(Eo *eo_it, Elm_Gen_Item *it)
 {
    elm_object_accessibility_highlight_set(VIEW(it), EINA_FALSE);
+///TIZEN_ONLY(20170717) : expose highlight information on atspi
+   eo_do(WIDGET(it), eo_event_callback_call(ELM_INTERFACE_ATSPI_ACCESSIBLE_EVENT_ACTIVE_DESCENDANT_CHANGED, eo_it));
+///
 
    return EINA_TRUE;
 }
index ad579cc..e990768 100644 (file)
@@ -988,6 +988,26 @@ _item_position(Elm_Gen_Item *it,
    if (!view) return;
    ELM_GENLIST_DATA_GET_FROM_ITEM(it, sd);
 
+   if ((void*)view == _elm_object_accessibility_currently_highlighted_get())
+     {
+        Elm_Genlist_Data * sd = it->item->wsd;
+        int x,y,w,h;
+        evas_object_geometry_get(sd->obj, &x, &y, &w, &h);
+
+        Elm_Gen_Item * next_previous_item = NULL;
+        if ((it_y + GL_IT(it)->h/2) < y)
+          {
+             next_previous_item = ELM_GEN_ITEM_FROM_INLIST(EINA_INLIST_GET(it)->next);
+          }
+        else if ((it_y + GL_IT(it)->h/2) > y + h)
+          {
+             next_previous_item = ELM_GEN_ITEM_FROM_INLIST(EINA_INLIST_GET(it)->prev);
+          }
+
+        if (next_previous_item)
+          eo_do(EO_OBJ(next_previous_item), elm_interface_atspi_component_highlight_grab());
+     }
+
    evas_event_freeze
      (evas_object_evas_get(sd->obj));
    evas_object_resize(view, it->item->w, it->item->h);
index 3dc38e3..1d9e0ae 100644 (file)
@@ -14,17 +14,17 @@ typedef uint64_t Elm_Atspi_State_Set;
 /*
  * Sets a particilar state type for given state set.
  */
-#define STATE_TYPE_SET(state_set, type)   (state_set|= (1ULL << type))
+#define STATE_TYPE_SET(state_set, type)   (state_set|= ((Elm_Atspi_State_Set)1 << type))
 
 /**
  * Unsets a particilar state type for given state set.
  */
-#define STATE_TYPE_UNSET(state_set, type) (state_set &= ~(1ULL << type))
+#define STATE_TYPE_UNSET(state_set, type) (state_set &= ~((Elm_Atspi_State_Set)1 << type))
 
 /**
  * Gets value of a particilar state type for given state set.
  */
-#define STATE_TYPE_GET(state_set, type)   (state_set & (1ULL << type))
+#define STATE_TYPE_GET(state_set, type)   (state_set & ((Elm_Atspi_State_Set)1 << type))
 
 
 /**
index c3ffa30..4b90ca7 100644 (file)
@@ -2178,6 +2178,9 @@ EOLIAN static Eina_Bool
 _elm_list_item_elm_interface_atspi_component_highlight_clear(Eo *eo_it, Elm_List_Item_Data *it)
 {
    elm_object_accessibility_highlight_set(VIEW(it), EINA_FALSE);
+///TIZEN_ONLY(20170717) : expose highlight information on atspi
+   elm_interface_atspi_accessible_state_changed_signal_emit(eo_it, ELM_ATSPI_STATE_HIGHLIGHTED, EINA_FALSE);
+///
 
    return EINA_TRUE;
 }
@@ -3442,6 +3445,9 @@ _elm_list_item_elm_interface_atspi_component_highlight_grab(Eo *eo_it, Elm_List_
    else
      elm_list_item_show(eo_it);
 
+///TIZEN_ONLY(20170717) : expose highlight information on atspi
+   elm_interface_atspi_accessible_state_changed_signal_emit(eo_it, ELM_ATSPI_STATE_HIGHLIGHTED, EINA_TRUE);
+///
    eo_do_super(eo_it, ELM_LIST_ITEM_CLASS, ret = elm_interface_atspi_component_highlight_grab());
    return ret;
 }
index 19e8191..4a08fda 100644 (file)
@@ -4074,6 +4074,10 @@ _elm_toolbar_item_elm_interface_atspi_component_highlight_grab(Eo *eo_it, Elm_To
 {
    elm_toolbar_item_show(eo_it, ELM_TOOLBAR_ITEM_SCROLLTO_IN);
    elm_object_accessibility_highlight_set(VIEW(it), EINA_TRUE);
+
+///TIZEN_ONLY(20170717) : expose highlight information on atspi
+   eo_do(WIDGET(it), eo_event_callback_call(ELM_INTERFACE_ATSPI_ACCESSIBLE_EVENT_ACTIVE_DESCENDANT_CHANGED, eo_it));
+///
    return EINA_TRUE;
 }
 
@@ -4081,6 +4085,9 @@ EOLIAN static Eina_Bool
 _elm_toolbar_item_elm_interface_atspi_component_highlight_clear(Eo *eo_it, Elm_Toolbar_Item_Data *it)
 {
    elm_object_accessibility_highlight_set(VIEW(it), EINA_FALSE);
+///TIZEN_ONLY(20170717) : expose highlight information on atspi
+   eo_do(WIDGET(it), eo_event_callback_call(ELM_INTERFACE_ATSPI_ACCESSIBLE_EVENT_ACTIVE_DESCENDANT_CHANGED, eo_it));
+///
    return EINA_TRUE;
 }
 //
index 26a799c..cd881a4 100644 (file)
@@ -4444,6 +4444,10 @@ _elm_widget_item_eo_base_constructor(Eo *eo_item, Elm_Widget_Item_Data *item)
 
    item->widget = widget;
    item->eo_obj = eo_item;
+///TIZEN_ONLY(20170717) : expose highlight information on atspi
+   item->can_highlight = EINA_TRUE;
+///
+
    eo_do(eo_item, eo_event_callback_add(EO_BASE_EVENT_DEL, _eo_del_cb, NULL));
 
    return eo_item;
@@ -4673,7 +4677,7 @@ _elm_widget_item_onscreen_is(Elm_Object_Item *item)
 
 EOLIAN static Elm_Atspi_State_Set
 _elm_widget_item_elm_interface_atspi_accessible_state_set_get(Eo *eo_item,
-                                                              Elm_Widget_Item_Data *item EINA_UNUSED)
+                                                              Elm_Widget_Item_Data *item)
 {
    Elm_Atspi_State_Set states = 0;
 
@@ -4690,6 +4694,13 @@ _elm_widget_item_elm_interface_atspi_accessible_state_set_get(Eo *eo_item,
    if (_elm_widget_item_onscreen_is(eo_item))
      STATE_TYPE_SET(states, ELM_ATSPI_STATE_SHOWING);
 
+///TIZEN_ONLY(20170717) : expose highlight information on atspi
+   if (item->can_highlight)
+     STATE_TYPE_SET(states, ELM_ATSPI_STATE_HIGHLIGHTABLE);
+
+   if (_elm_object_accessibility_currently_highlighted_get() == (void*)item->view)
+     STATE_TYPE_SET(states, ELM_ATSPI_STATE_HIGHLIGHTED);
+///
    return states;
 }
 
@@ -5752,6 +5763,9 @@ _elm_widget_eo_base_constructor(Eo *obj, Elm_Widget_Smart_Data *sd EINA_UNUSED)
          parent = eo_parent_get());
    eo_do(obj, elm_obj_widget_parent_set(parent));
    sd->on_create = EINA_FALSE;
+///TIZEN_ONLY(20170717) : expose highlight information on atspi
+   sd->can_highlight = EINA_TRUE;
+///
 
    eo_do(obj, elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_UNKNOWN));
    return obj;
@@ -6004,7 +6018,7 @@ _elm_widget_elm_interface_atspi_accessible_parent_get(Eo *obj EINA_UNUSED, Elm_W
 }
 
 EOLIAN static Elm_Atspi_State_Set
-_elm_widget_elm_interface_atspi_accessible_state_set_get(Eo *obj, Elm_Widget_Smart_Data *pd EINA_UNUSED)
+_elm_widget_elm_interface_atspi_accessible_state_set_get(Eo *obj, Elm_Widget_Smart_Data *pd)
 {
    Elm_Atspi_State_Set states = 0;
 
@@ -6029,6 +6043,14 @@ _elm_widget_elm_interface_atspi_accessible_state_set_get(Eo *obj, Elm_Widget_Sma
         STATE_TYPE_SET(states, ELM_ATSPI_STATE_SENSITIVE);
      }
 
+///TIZEN_ONLY(20170717) : expose highlight information on atspi
+   if (pd->can_highlight)
+     STATE_TYPE_SET(states, ELM_ATSPI_STATE_HIGHLIGHTABLE);
+
+   if (_elm_object_accessibility_currently_highlighted_get() == (void*)pd->obj)
+     STATE_TYPE_SET(states, ELM_ATSPI_STATE_HIGHLIGHTED);
+///
+
    return states;
 }
 
index 8c43675..1dba1a7 100644 (file)
@@ -451,6 +451,10 @@ typedef struct _Elm_Widget_Smart_Data
    Eina_Bool                     on_translate : 1; /**< This is true when any types of elm translate function is being called. */
    Eina_Bool                     on_create : 1; /**< This is true when the widget is on creation(general widget constructor). */
    Eina_Bool                     on_destroy: 1; /**< This is true when the widget is on destruction(general widget destructor). */
+   ///TIZEN_ONLY(20170717) : expose highlight information on atspi
+   Eina_Bool                     can_highlight : 1; /**< true if widget have at-spi HIGHLIGHTABLE state */
+   ///
+
 } Elm_Widget_Smart_Data;
 
 /**
@@ -548,6 +552,8 @@ void                  _elm_win_focus_auto_hide(Evas_Object *obj);
 //TIZEN_ONLY(20160404) Accessibility Highlight Frame added (99248ce)
 void                  _elm_win_object_set_accessibility_highlight(Evas_Object *win, Evas_Object *obj);
 //
+void                 *_elm_object_accessibility_currently_highlighted_get();
+
 EAPI void             _elm_access_clear(Elm_Access_Info *ac);
 EAPI void             _elm_access_text_set(Elm_Access_Info *ac, int type, const char *text);
 EAPI void             _elm_access_callback_set(Elm_Access_Info *ac, int type, Elm_Access_Info_Cb func, const void *data);
@@ -643,6 +649,9 @@ struct _Elm_Widget_Item_Data
    Eina_Bool                      on_deletion : 1;
    Eina_Bool                      on_translate : 1;
    Eina_Bool                      still_in : 1;
+   ///TIZEN_ONLY(20170717) : expose highlight information on atspi
+   Eina_Bool                      can_highlight : 1; /**< true if widget have at-spi HIGHLIGHTABLE state */
+   ///
 };
 
 #define ELM_NEW(t) calloc(1, sizeof(t))