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();
 }

-- 


Reply via email to