stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=fa6bcdda8cf5cc69c37a96a96c1bd7ed93df52c9
commit fa6bcdda8cf5cc69c37a96a96c1bd7ed93df52c9 Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Mon Dec 28 14:40:34 2015 +0100 index: accessibilitize index items Expose elm_index items as accessiblie buttons. Provide name and "activate" action. --- src/lib/elm_index.c | 70 +++++++++++++++++++++++++++++++++++++++++++++- src/lib/elm_index.eo | 1 + src/lib/elm_index_item.eo | 4 ++- src/tests/elm_test_index.c | 2 +- 4 files changed, 74 insertions(+), 3 deletions(-) diff --git a/src/lib/elm_index.c b/src/lib/elm_index.c index c09df9e..17f844a 100644 --- a/src/lib/elm_index.c +++ b/src/lib/elm_index.c @@ -3,6 +3,8 @@ #endif #define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED +#define ELM_INTERFACE_ATSPI_WIDGET_ACTION_PROTECTED +#define ELM_INTERFACE_ATSPI_COMPONENT_PROTECTED #define ELM_WIDGET_ITEM_PROTECTED #include <Elementary.h> @@ -529,6 +531,7 @@ _elm_index_item_eo_base_constructor(Eo *obj, Elm_Index_Item_Data *it) { obj = eo_do_super_ret(obj, ELM_INDEX_ITEM_CLASS, obj, eo_constructor()); it->base = eo_data_scope_get(obj, ELM_WIDGET_ITEM_CLASS); + eo_do(obj, elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_PUSH_BUTTON)); return obj; } @@ -1229,7 +1232,7 @@ _elm_index_eo_base_constructor(Eo *obj, Elm_Index_Data *_pd EINA_UNUSED) eo_do(obj, evas_obj_type_set(MY_CLASS_NAME_LEGACY), evas_obj_smart_callbacks_descriptions_set(_smart_callbacks), - elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_LIST)); + elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_SCROLL_BAR)); return obj; } @@ -1369,6 +1372,12 @@ _elm_index_item_append(Eo *obj, Elm_Index_Data *sd, const char *letter, Evas_Sma ELM_INDEX_ITEM_DATA_GET(eo_item, it); VIEW(it) = edje_object_add(evas_object_evas_get(obj)); + if (_elm_config->atspi_mode) + { + elm_interface_atspi_accessible_added(eo_item); + elm_interface_atspi_accessible_children_changed_added_signal_emit(obj, eo_item); + } + return eo_item; } @@ -1385,6 +1394,12 @@ _elm_index_item_prepend(Eo *obj, Elm_Index_Data *sd, const char *letter, Evas_Sm ELM_INDEX_ITEM_DATA_GET(eo_item, it); VIEW(it) = edje_object_add(evas_object_evas_get(obj)); + if (_elm_config->atspi_mode) + { + elm_interface_atspi_accessible_added(eo_item); + elm_interface_atspi_accessible_children_changed_added_signal_emit(obj, eo_item); + } + return eo_item; } @@ -1414,6 +1429,12 @@ _elm_index_item_insert_after(Eo *obj, Elm_Index_Data *sd, Elm_Object_Item *after ELM_INDEX_ITEM_DATA_GET(eo_item, it); VIEW(it) = edje_object_add(evas_object_evas_get(obj)); + if (_elm_config->atspi_mode) + { + elm_interface_atspi_accessible_added(eo_item); + elm_interface_atspi_accessible_children_changed_added_signal_emit(obj, eo_item); + } + return eo_item; } @@ -1432,6 +1453,12 @@ _elm_index_item_insert_before(Eo *obj, Elm_Index_Data *sd, Elm_Object_Item *befo ELM_INDEX_ITEM_DATA_GET(eo_item, it); VIEW(it) = edje_object_add(evas_object_evas_get(obj)); + if (_elm_config->atspi_mode) + { + elm_interface_atspi_accessible_added(eo_item); + elm_interface_atspi_accessible_children_changed_added_signal_emit(obj, eo_item); + } + return eo_item; } @@ -1470,6 +1497,12 @@ _elm_index_item_sorted_insert(Eo *obj, Elm_Index_Data *sd, const char *letter, E ELM_INDEX_ITEM_DATA_GET(eo_item, it); VIEW(it) = edje_object_add(evas_object_evas_get(obj)); + if (_elm_config->atspi_mode) + { + elm_interface_atspi_accessible_added(eo_item); + elm_interface_atspi_accessible_children_changed_added_signal_emit(obj, eo_item); + } + if (!eo_item) return NULL; else return eo_item; } @@ -1654,5 +1687,40 @@ _elm_index_class_constructor(Eo_Class *klass) evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass); } +static Eina_Bool +_item_action_activate(Eo *obj, const char *params EINA_UNUSED EINA_UNUSED) +{ + elm_index_item_selected_set(obj, EINA_TRUE); + return EINA_TRUE; +} + +EOLIAN static Eina_List* +_elm_index_elm_interface_atspi_accessible_children_get(Eo *obj, Elm_Index_Data *data) +{ + Eina_List *ret; + eo_do_super(obj, ELM_INDEX_CLASS, ret = elm_interface_atspi_accessible_children_get()); + return eina_list_merge(eina_list_clone(data->items), ret); +} + +EOLIAN static char* +_elm_index_item_elm_interface_atspi_accessible_name_get(Eo *eo_it, Elm_Index_Item_Data *data) +{ + char *name; + eo_do_super(eo_it, ELM_INDEX_ITEM_CLASS, name = elm_interface_atspi_accessible_name_get()); + if (name) return name; + + return data->letter ? strdup(data->letter) : NULL; +} + +EOLIAN static const Elm_Atspi_Action* +_elm_index_item_elm_interface_atspi_widget_action_elm_actions_get(Eo *eo_it EINA_UNUSED, Elm_Index_Item_Data *data EINA_UNUSED) +{ + static Elm_Atspi_Action atspi_actions[] = { + { "activate", "activate", NULL, _item_action_activate}, + { NULL, NULL, NULL, NULL } + }; + return &atspi_actions[0]; +} + #include "elm_index_item.eo.c" #include "elm_index.eo.c" diff --git a/src/lib/elm_index.eo b/src/lib/elm_index.eo index e51f779..5f10880 100644 --- a/src/lib/elm_index.eo +++ b/src/lib/elm_index.eo @@ -243,6 +243,7 @@ class Elm.Index (Elm.Layout, Evas.Clickable_Interface, Evas.Selectable_Interface Elm.Widget.access; Elm.Widget.focus_next; Elm.Layout.sizing_eval; + Elm_Interface_Atspi_Accessible.children.get; } events { changed; diff --git a/src/lib/elm_index_item.eo b/src/lib/elm_index_item.eo index 36d490a..c9f7a7a 100644 --- a/src/lib/elm_index_item.eo +++ b/src/lib/elm_index_item.eo @@ -1,4 +1,4 @@ -class Elm.Index_Item(Elm.Widget_Item) +class Elm.Index_Item(Elm.Widget_Item, Elm_Interface_Atspi_Widget_Action) { eo_prefix: elm_obj_index_item; methods { @@ -42,5 +42,7 @@ class Elm.Index_Item(Elm.Widget_Item) Eo.Base.constructor; Eo.Base.destructor; Elm.Widget_Item.access_register; + Elm_Interface_Atspi_Accessible.name.get; + Elm_Interface_Atspi_Widget_Action.elm_actions.get; } } diff --git a/src/tests/elm_test_index.c b/src/tests/elm_test_index.c index a07b76e..6b9fdc1 100644 --- a/src/tests/elm_test_index.c +++ b/src/tests/elm_test_index.c @@ -18,7 +18,7 @@ START_TEST (elm_atspi_role_get) idx = elm_index_add(win); eo_do(idx, role = elm_interface_atspi_accessible_role_get()); - ck_assert(role == ELM_ATSPI_ROLE_LIST); + ck_assert(role == ELM_ATSPI_ROLE_SCROLL_BAR); elm_shutdown(); } --