From d410fc314c0b45bff341932626a0c5c48b79e9ac Mon Sep 17 00:00:00 2001 From: Lukasz Stanislawski Date: Fri, 17 Jul 2015 17:23:27 +0200 Subject: [PATCH] atspi: expose highlight information on atspi Change-Id: I6a79016c1fbd8c1228eb974cfb842ab0eb0d0d3f --- src/lib/elm_access.c | 6 ++++++ src/lib/elm_colorselector.c | 6 ++++++ src/lib/elm_gengrid.c | 6 ++++++ src/lib/elm_genlist.c | 20 ++++++++++++++++++++ src/lib/elm_interface_atspi_accessible.h | 6 +++--- src/lib/elm_list.c | 6 ++++++ src/lib/elm_toolbar.c | 7 +++++++ src/lib/elm_widget.c | 26 ++++++++++++++++++++++++-- src/lib/elm_widget.h | 9 +++++++++ 9 files changed, 87 insertions(+), 5 deletions(-) diff --git a/src/lib/elm_access.c b/src/lib/elm_access.c index b33bec6..7866154 100644 --- a/src/lib/elm_access.c +++ b/src/lib/elm_access.c @@ -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; } diff --git a/src/lib/elm_colorselector.c b/src/lib/elm_colorselector.c index e6df91e..f09f8e8 100644 --- a/src/lib/elm_colorselector.c +++ b/src/lib/elm_colorselector.c @@ -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; } diff --git a/src/lib/elm_gengrid.c b/src/lib/elm_gengrid.c index e2ce932..57d8cee 100644 --- a/src/lib/elm_gengrid.c +++ b/src/lib/elm_gengrid.c @@ -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; } diff --git a/src/lib/elm_genlist.c b/src/lib/elm_genlist.c index ad579cc..e990768 100644 --- a/src/lib/elm_genlist.c +++ b/src/lib/elm_genlist.c @@ -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); diff --git a/src/lib/elm_interface_atspi_accessible.h b/src/lib/elm_interface_atspi_accessible.h index 3dc38e3..1d9e0ae 100644 --- a/src/lib/elm_interface_atspi_accessible.h +++ b/src/lib/elm_interface_atspi_accessible.h @@ -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)) /** diff --git a/src/lib/elm_list.c b/src/lib/elm_list.c index c3ffa30..4b90ca7 100644 --- a/src/lib/elm_list.c +++ b/src/lib/elm_list.c @@ -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; } diff --git a/src/lib/elm_toolbar.c b/src/lib/elm_toolbar.c index 19e8191..4a08fda 100644 --- a/src/lib/elm_toolbar.c +++ b/src/lib/elm_toolbar.c @@ -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; } // diff --git a/src/lib/elm_widget.c b/src/lib/elm_widget.c index 26a799c..cd881a4 100644 --- a/src/lib/elm_widget.c +++ b/src/lib/elm_widget.c @@ -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; } diff --git a/src/lib/elm_widget.h b/src/lib/elm_widget.h index 8c43675..1dba1a7 100644 --- a/src/lib/elm_widget.h +++ b/src/lib/elm_widget.h @@ -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)) -- 2.7.4