Add atspi accessibility support to EflMultiLineCandidate 47/162047/2
authorPaweł Stawicki <p.stawicki@samsung.com>
Tue, 28 Nov 2017 18:47:08 +0000 (19:47 +0100)
committerPaweł Stawicki <p.stawicki@samsung.com>
Tue, 28 Nov 2017 18:52:14 +0000 (19:52 +0100)
Change-Id: I97927ccec36834860b302ab892842b8c08a16c15

src/candidate/efl/candidate-multiline-efl.cpp
src/candidate/efl/candidate-multiline-efl.h

index 163542c..05257eb 100644 (file)
@@ -77,24 +77,26 @@ _mouse_move(void *data, Evas *e,
 void
 EflMultiLineCandidate::item_pressed(Evas_Object *item)
 {
+    const char *str = edje_object_part_text_get(item, "candidate");
+    item_pressed(str? str : "");
+}
+
+void
+EflMultiLineCandidate::item_pressed(std::string str)
+{
 #ifdef _TV
     m_candidates_item.clear();
     g_ui->enable_highlight_ui(TRUE);
     m_highlight_mode = false;
 #endif
 
-    const char *str = edje_object_part_text_get(
-        item, "candidate");
-
     int index = -1;
-    if (str) {
-        vector<string>::const_iterator it =
-            find(cur_candidates.begin(), cur_candidates.end(), str);
-        if (it != cur_candidates.end()) {
-            index = it-cur_candidates.begin();
-        } else {
-            index = -1;
-        }
+    vector<string>::const_iterator it =
+        find(cur_candidates.begin(), cur_candidates.end(), str);
+    if (it != cur_candidates.end()) {
+        index = it-cur_candidates.begin();
+    } else {
+        index = -1;
     }
 
     //hide_more_view();
@@ -102,7 +104,7 @@ EflMultiLineCandidate::item_pressed(Evas_Object *item)
     MultiEventDesc desc;
     desc.type = MultiEventDesc::CANDIDATE_ITEM_MOUSE_DOWN;
     desc.index = index;
-    desc.text = str? str : "";
+    desc.text = str;
     notify_listeners(desc);
 }
 
@@ -491,6 +493,32 @@ EflMultiLineCandidate::get_candidate_item_text_size(string srcStr)
     return item_text_size;
 }
 
+static Eina_Bool
+_item_access_action(void *data, Evas_Object *access_object, Elm_Access_Action_Info *action_info)
+{
+    const char * name = elm_atspi_accessible_name_get(access_object);
+    LOGD("access_action callback on item: %s", name);
+    if (!name)
+        return EINA_FALSE;
+
+    EflMultiLineCandidate *candidate = (EflMultiLineCandidate *)data;
+    candidate->item_pressed(name);
+    return EINA_TRUE;
+}
+
+void
+EflMultiLineCandidate::register_access_object(Evas_Object* obj, std::string name, const Elm_Access_Action_Cb access_action, const void *data)
+{
+    Evas_Object * access_object = elm_access_object_register(obj, m_window);
+    if (!access_object)
+        return;
+    elm_atspi_accessible_name_set(access_object, name.c_str());
+    elm_atspi_accessible_role_set(access_object, ELM_ATSPI_ROLE_PUSH_BUTTON);
+    if (access_action)
+        elm_access_action_cb_set(access_object, ELM_ACCESS_ACTION_ACTIVATE, access_action, data);
+}
+
+
 void
 EflMultiLineCandidate::update(const vector<string> &vec_str)
 {
@@ -527,6 +555,7 @@ EflMultiLineCandidate::update(const vector<string> &vec_str)
             }
             Evas_Object *item = get_candidate_item(item_text_size);
             edje_object_part_text_set(item, "candidate", vec_str[i].c_str());
+            register_access_object(item, vec_str[i], _item_access_action, this);
             y_start = (CANDIDATE_WINDOW_HEIGHT*m_screenRatio - item_text_size.height)/2;
             elm_table_pack(m_candidateTable, item, cur_item_sum, y_start,
                            item_text_size.width, item_text_size.height);
@@ -542,6 +571,7 @@ EflMultiLineCandidate::update(const vector<string> &vec_str)
                 int y_start = 0;
                 Evas_Object *item = get_candidate_item(item_text_size);
                 edje_object_part_text_set(item, "candidate", vec_str[i].c_str());
+                register_access_object(item, vec_str[i], _item_access_action, this);
                 y_start = (CANDIDATE_WINDOW_HEIGHT*m_screenRatio - item_text_size.height)/2;
                 elm_table_pack(m_candidateTable, item, cur_item_sum, y_start,
                                item_text_size.width, item_text_size.height);
index 70f1374..e1502a9 100644 (file)
@@ -43,6 +43,7 @@ class EflMultiLineCandidate: public Candidate
         void more_btn_clicked();
         void more_btn_released();
         void close_btn_clicked();
+        void item_pressed(std::string str);
         void item_pressed(Evas_Object *);
         void item_released(Evas_Object *);
         void item_moved(Evas_Object *);
@@ -58,6 +59,7 @@ class EflMultiLineCandidate: public Candidate
         void show_view();
         void hide_view();
 
+        void register_access_object(Evas_Object* obj, std::string name, const Elm_Access_Action_Cb access_action = NULL, const void *data = NULL);
         Evas_Object *get_candidate_item(candidate_item_size item_text_size);
         candidate_item_size get_candidate_item_text_size(std::string srcStr);
         Evas_Object * get_candidate_seperate_line_vertical();