[atspi] keep eo_obj as current highlighted object for widget item 82/93482/6
authorShinwoo Kim <cinoo.kim@samsung.com>
Mon, 24 Oct 2016 11:44:48 +0000 (20:44 +0900)
committerGerrit Code Review <gerrit@review.vlan103.tizen.org>
Fri, 28 Oct 2016 10:27:24 +0000 (03:27 -0700)
So far, elm_object_accessibility_highlight_set have used VIEW object of Elm_Object_Item.
But, we cannot get Elm_Object_Item related data from VIEW which is returned by _elm_object_accessibility_currently_highlighted_get
We need to use currently highlighted object with some APIs such as elm_interface_atspi_accessible_state_changed_signal_emit.
But, we cannot use this kind of API with VIEW object.

Change-Id: I85ee98c4e2510c8e59c7fd0758281dfa9282f12e

src/lib/elm_colorselector.c
src/lib/elm_gengrid.c
src/lib/elm_genlist.c
src/lib/elm_list.c
src/lib/elm_main.c
src/lib/elm_object.h
src/lib/elm_toolbar.c
src/lib/elm_widget.c
src/mobile_lib/elm_genlist.c

index dac8d59..8ae15d4 100644 (file)
@@ -2772,7 +2772,7 @@ _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);
+   elm_object_accessibility_highlight_set(EO_OBJ(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);
 ///
@@ -2783,7 +2783,7 @@ _elm_color_item_elm_interface_atspi_component_highlight_grab(Eo *eo_it, Elm_Colo
 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);
+   elm_object_accessibility_highlight_set(EO_OBJ(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);
 ///
index cbfc5ed..eaf1d32 100644 (file)
@@ -1503,7 +1503,7 @@ _item_realize(Elm_Gen_Item *it)
    if (sd->atspi_item_to_highlight == it)
      {
         sd->atspi_item_to_highlight = NULL;
-        elm_object_accessibility_highlight_set(VIEW(it), EINA_TRUE);
+        elm_object_accessibility_highlight_set(EO_OBJ(it), EINA_TRUE);
      }
 //
 }
@@ -5799,7 +5799,7 @@ _elm_gengrid_item_elm_interface_atspi_component_highlight_grab(Eo *eo_it, Elm_Ge
      }
 
    if (VIEW(it))
-      elm_object_accessibility_highlight_set(VIEW(it), EINA_TRUE);
+      elm_object_accessibility_highlight_set(EO_OBJ(it), EINA_TRUE);
    else
       sd->atspi_item_to_highlight = it;//it will be highlighted when realized
 
@@ -5818,7 +5818,7 @@ _elm_gengrid_item_elm_interface_atspi_component_highlight_clear(Eo *eo_it, Elm_G
    if (sd->atspi_item_to_highlight == it)
        sd->atspi_item_to_highlight = NULL;
 //
-   elm_object_accessibility_highlight_set(VIEW(it), EINA_FALSE);
+   elm_object_accessibility_highlight_set(EO_OBJ(it), EINA_FALSE);
 ///TIZEN_ONLY(20170717) : expose highlight information on atspi
    elm_interface_atspi_accessible_active_descendant_changed_signal_emit(WIDGET(it), eo_it);
 ///
index 4820bb8..9cad7f5 100644 (file)
@@ -1016,7 +1016,16 @@ _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())
+   Evas_Object * highlighted_obj = _elm_object_accessibility_currently_highlighted_get();
+   if (eo_isa(highlighted_obj, ELM_WIDGET_ITEM_CLASS))
+     {
+        Elm_Widget_Item_Data *id = eo_data_scope_get(highlighted_obj, ELM_WIDGET_ITEM_CLASS);
+        highlighted_obj = id->view;
+     }
+   else
+     highlighted_obj = NULL;
+
+   if (highlighted_obj && view == highlighted_obj)
      {
         int x,y,w,h;
         evas_object_geometry_get(sd->obj, &x, &y, &w, &h);
@@ -8653,6 +8662,12 @@ _elm_genlist_elm_interface_scrollable_content_pos_set(Eo *obj, Elm_Genlist_Data
 
    //check if highlighted item is genlist descendant
    Evas_Object * highlighted_obj = _elm_object_accessibility_currently_highlighted_get();
+   if (eo_isa(highlighted_obj, ELM_WIDGET_ITEM_CLASS))
+     {
+        Elm_Widget_Item_Data *id = eo_data_scope_get(highlighted_obj, ELM_WIDGET_ITEM_CLASS);
+        highlighted_obj = id->view;
+     }
+
    Evas_Object *parent = highlighted_obj;
    if (eo_isa(highlighted_obj, ELM_WIDGET_CLASS))
      {
index 43a8fe1..eacc0c2 100644 (file)
@@ -2209,7 +2209,7 @@ _elm_list_item_elm_interface_atspi_accessible_children_get(Eo *eo_it EINA_UNUSED
 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);
+   elm_object_accessibility_highlight_set(EO_OBJ(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);
 ///
@@ -3412,6 +3412,13 @@ _elm_list_elm_interface_scrollable_content_pos_set(Eo *obj EINA_UNUSED, Elm_List
 
    //check if highlighted item is list descendant
    Evas_Object * highlighted_obj = _elm_object_accessibility_currently_highlighted_get();
+   if (eo_isa(highlighted_obj, ELM_WIDGET_ITEM_CLASS))
+     {
+        ERR("[KSW] ITEM!");
+        Elm_Widget_Item_Data *id = eo_data_scope_get(highlighted_obj, ELM_WIDGET_ITEM_CLASS);
+        highlighted_obj = id->view;
+     }
+
    Evas_Object * parent = highlighted_obj;
    if (eo_isa(highlighted_obj, ELM_WIDGET_CLASS))
      {
index b2ebda1..66efec5 100644 (file)
@@ -1859,22 +1859,31 @@ EAPI Evas_Object *elm_object_part_access_object_get(const Evas_Object *obj, cons
 //
 
 void *
-_elm_object_accessibility_currently_highlighted_get()
+_elm_object_accessibility_currently_highlighted_get(void)
 {
    return _accessibility_currently_highlighted_obj;
 }
 
 //TIZEN_ONLY(20160329): win: add accessibility highlight (d4753268ad02d0c25c16f815003c70b158879ca7)
-EAPI void
-elm_object_accessibility_highlight_set(Evas_Object *obj, Eina_Bool visible)
+void
+elm_object_accessibility_highlight_set(void *obj, Eina_Bool visible)
 {
    EINA_SAFETY_ON_NULL_RETURN(obj);
    Evas_Object *win = NULL;
+   Evas_Object *target = NULL;
+
+   if (eo_isa(obj, ELM_WIDGET_ITEM_CLASS))
+     {
+        Elm_Widget_Item_Data *id = eo_data_scope_get(obj, ELM_WIDGET_ITEM_CLASS);
+        target = id->view;
+     }
+   else
+     target = obj;
 
-   if (elm_object_widget_check(obj))
-      win = elm_object_top_widget_get(obj);
+   if (elm_object_widget_check(target))
+      win = elm_object_top_widget_get(target);
    else
-      win = elm_object_top_widget_get(elm_object_parent_widget_get(obj));
+      win = elm_object_top_widget_get(elm_object_parent_widget_get(target));
    EINA_SAFETY_ON_NULL_RETURN(win);
 
    if (_accessibility_currently_highlighted_obj == (void*)obj)
@@ -1890,14 +1899,14 @@ elm_object_accessibility_highlight_set(Evas_Object *obj, Eina_Bool visible)
 
    if (visible)
      {
-       if (elm_widget_access_highlight_in_theme_get(obj))
+       if (elm_widget_access_highlight_in_theme_get(target))
           elm_widget_signal_emit(obj, "elm,action,access_highlight,show", "elm");
        else
-          _elm_win_object_set_accessibility_highlight(win, obj);
+          _elm_win_object_set_accessibility_highlight(win, target);
      }
    else
      {
-       if (elm_widget_access_highlight_in_theme_get(obj))
+       if (elm_widget_access_highlight_in_theme_get(target))
           elm_widget_signal_emit(obj, "elm,action,access_highlight,hide", "elm");
        else
           _elm_win_object_set_accessibility_highlight(win, NULL);
index 77acba1..9b18076 100644 (file)
@@ -628,27 +628,6 @@ EAPI Eina_Bool   elm_object_orientation_mode_disabled_get(const Evas_Object *obj
 EAPI Evas_Object *elm_object_part_access_object_get(const Evas_Object *obj, const char *part);
 //
 
-//TIZEN_ONLY(20160329): win: add accessibility highlight (d4753268ad02d0c25c16f815003c70b158879ca7)
-/**
- * Set accessibility highlight on object.
- *
- * Accessibility higlight helps visually impaired people to localize elements on
- * application's user interface. It can be used to point to currently focused
- * objects, interesting elements in given application context or it can just point
- * to object that mouse is currently hovering above.
- *
- * There can be only one highlighted object per window.
- *
- * @param obj The Elementary widget to set accessibility highlight.
- * @param val EINA_TRUE is object should be highlighted, EINA_FALSE otherwise.
- *
- * @tizen_only
- *
- * @ingroup General
- */
-EAPI void elm_object_accessibility_highlight_set(Evas_Object *obj, Eina_Bool val);
-//
-
 // TIZEN_ONLY(20150705): Genlist item align feature
 /**
  * @brief Sets the scroll item align enable.
index eb971b3..4e27fc5 100644 (file)
@@ -4145,7 +4145,7 @@ EOLIAN static Eina_Bool
 _elm_toolbar_item_elm_interface_atspi_component_highlight_grab(Eo *eo_it, Elm_Toolbar_Item_Data *it)
 {
    elm_toolbar_item_show(eo_it, ELM_TOOLBAR_ITEM_SCROLLTO_IN);
-   elm_object_accessibility_highlight_set(VIEW(it), EINA_TRUE);
+   elm_object_accessibility_highlight_set(EO_OBJ(it), EINA_TRUE);
 
 ///TIZEN_ONLY(20170717) : expose highlight information on atspi
    elm_interface_atspi_accessible_active_descendant_changed_signal_emit(WIDGET(it), eo_it);
@@ -4156,7 +4156,7 @@ _elm_toolbar_item_elm_interface_atspi_component_highlight_grab(Eo *eo_it, Elm_To
 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);
+   elm_object_accessibility_highlight_set(EO_OBJ(it), EINA_FALSE);
 ///TIZEN_ONLY(20170717) : expose highlight information on atspi
    elm_interface_atspi_accessible_active_descendant_changed_signal_emit(WIDGET(it), eo_it);
 ///
@@ -4291,6 +4291,12 @@ _elm_toolbar_elm_interface_scrollable_content_pos_set(Eo *obj EINA_UNUSED, Elm_T
    delta_x = old_x - x;
    //check if highlighted item is list descendant
    Evas_Object * highlighted_obj = _elm_object_accessibility_currently_highlighted_get();
+   if (eo_isa(highlighted_obj, ELM_WIDGET_ITEM_CLASS))
+     {
+        Elm_Widget_Item_Data *id = eo_data_scope_get(highlighted_obj, ELM_WIDGET_ITEM_CLASS);
+        highlighted_obj = id->view;
+     }
+
    Evas_Object * parent = highlighted_obj;
    if (eo_isa(highlighted_obj, ELM_WIDGET_CLASS))
      {
index b48f066..557e62c 100644 (file)
@@ -4933,7 +4933,7 @@ _elm_widget_item_elm_interface_atspi_accessible_state_set_get(Eo *eo_item,
    else
      STATE_TYPE_UNSET(states, ELM_ATSPI_STATE_HIGHLIGHTABLE);
 
-   if (_elm_object_accessibility_currently_highlighted_get() == (void*)item->view)
+   if (_elm_object_accessibility_currently_highlighted_get() == (void*)item->eo_obj)
      STATE_TYPE_SET(states, ELM_ATSPI_STATE_HIGHLIGHTED);
    //
    return states;
@@ -6623,7 +6623,7 @@ _elm_widget_item_elm_interface_atspi_component_highlight_grab(Eo *obj, Elm_Widge
           }
      }
 
-   elm_object_accessibility_highlight_set(sd->view, EINA_TRUE);
+   elm_object_accessibility_highlight_set(sd->eo_obj, EINA_TRUE);
    elm_interface_atspi_accessible_state_changed_signal_emit(obj, ELM_ATSPI_STATE_HIGHLIGHTED, EINA_TRUE);
 
    return EINA_TRUE;
@@ -6634,7 +6634,7 @@ EOLIAN static Eina_Bool
 _elm_widget_item_elm_interface_atspi_component_highlight_clear(Eo *obj, Elm_Widget_Item_Data *sd)
 {
    if (!obj) return EINA_FALSE;
-   elm_object_accessibility_highlight_set(sd->view, EINA_FALSE);
+   elm_object_accessibility_highlight_set(sd->eo_obj, EINA_FALSE);
    elm_interface_atspi_accessible_state_changed_signal_emit(obj, ELM_ATSPI_STATE_HIGHLIGHTED, EINA_FALSE);
    return EINA_TRUE;
 }
index b7736a5..8e647cb 100644 (file)
@@ -1649,7 +1649,7 @@ _item_realize(Elm_Gen_Item *it,
    if (sd->atspi_item_to_highlight == it)
      {
         sd->atspi_item_to_highlight = NULL;
-        elm_object_accessibility_highlight_set(VIEW(it), EINA_TRUE);
+        elm_object_accessibility_highlight_set(EO_OBJ(it), EINA_TRUE);
      }
 }
 
@@ -8192,7 +8192,7 @@ _elm_genlist_item_elm_interface_atspi_component_highlight_grab(Eo *eo_it, Elm_Ge
      }
 
    if (VIEW(it))
-        elm_object_accessibility_highlight_set(VIEW(it), EINA_TRUE);
+        elm_object_accessibility_highlight_set(EO_OBJ(it), EINA_TRUE);
    else
        sd->atspi_item_to_highlight = it;//it will be highlighted when realized
 
@@ -8209,7 +8209,7 @@ _elm_genlist_item_elm_interface_atspi_component_highlight_clear(Eo *eo_it, Elm_G
    ELM_GENLIST_DATA_GET(WIDGET(it), sd);
    if (sd->atspi_item_to_highlight == it)
        sd->atspi_item_to_highlight = NULL;
-   elm_object_accessibility_highlight_set(VIEW(it), EINA_FALSE);
+   elm_object_accessibility_highlight_set(EO_OBJ(it), EINA_FALSE);
 ///TIZEN_ONLY(20170717) : expose highlight information on atspi
    elm_interface_atspi_accessible_active_descendant_changed_signal_emit(WIDGET(it), eo_it);
 ///
@@ -8490,6 +8490,12 @@ _elm_genlist_elm_interface_scrollable_content_pos_set(Eo *obj, Elm_Genlist_Data
 
    //check if highlighted item is genlist descendant
    Evas_Object * highlighted_obj = _elm_object_accessibility_currently_highlighted_get();
+   if (eo_isa(highlighted_obj, ELM_WIDGET_ITEM_CLASS))
+     {
+        Elm_Widget_Item_Data *id = eo_data_scope_get(highlighted_obj, ELM_WIDGET_ITEM_CLASS);
+        highlighted_obj = id->view;
+     }
+
    Evas_Object * parent = highlighted_obj;
    if (eo_isa(highlighted_obj, ELM_WIDGET_CLASS))
      {