raster pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=5b791420ea03d27d6126a8e048491e056008606b

commit 5b791420ea03d27d6126a8e048491e056008606b
Author: Shilpa Singh <shilpa.si...@samsung.com>
Date:   Mon Jul 11 10:36:38 2016 +0900

    Accessibility: Read pre-edit text.
    
    Summary:
    Edje_entry:  In order to read pre-edit characters as well,
    send entry_change_info with preedit,changed
    Elm_entry: In order to read pre-edit characters as well,
    send text to screen reader on preedit,changed.
    
    Test Plan:
    1. Change keyboard language to korean/enable prediction
    2. Check the reading, text should be read even before committing
    
    Signed-off-by: Shilpa Singh <shilpa.si...@samsung.com>
    
    Reviewers: thiepha, jihoon, cedric, raster
    
    Reviewed By: raster
    
    Subscribers: raster, kimcinoo, cedric, jpeg
    
    Differential Revision: https://phab.enlightenment.org/D4145
---
 src/lib/edje/edje_entry.c      | 12 ++++++------
 src/lib/elementary/elm_entry.c | 20 ++++++++++++++++++++
 2 files changed, 26 insertions(+), 6 deletions(-)

diff --git a/src/lib/edje/edje_entry.c b/src/lib/edje/edje_entry.c
index 5fda862..c5ed2b3 100644
--- a/src/lib/edje/edje_entry.c
+++ b/src/lib/edje/edje_entry.c
@@ -18,6 +18,7 @@ static void _edje_entry_imf_cursor_location_set(Entry *en);
 static void _edje_entry_imf_cursor_info_set(Entry *en);
 static void _range_del_emit(Edje *ed, Evas_Textblock_Cursor *c EINA_UNUSED, 
Evas_Object *o EINA_UNUSED, Entry *en);
 static void _text_filter_format_prepend(Edje *ed, Entry *en, 
Evas_Textblock_Cursor *c, const char *text);
+static void _free_entry_change_info(void *_info);
 
 struct _Entry
 {
@@ -4279,6 +4280,7 @@ _edje_entry_imf_event_preedit_changed_cb(void *data, 
Ecore_IMF_Context *ctx EINA
    Edje *ed = data;
    Edje_Real_Part *rp = ed->focused_part;
    Entry *en = NULL;
+   Edje_Entry_Change_Info *info = NULL;
    int cursor_pos;
    int preedit_start_pos, preedit_end_pos;
    char *preedit_string;
@@ -4368,8 +4370,6 @@ _edje_entry_imf_event_preedit_changed_cb(void *data, 
Ecore_IMF_Context *ctx EINA
         if ((rp->part->entry_mode == EDJE_ENTRY_EDIT_MODE_PASSWORD) &&
             _edje_password_show_last)
           {
-             Edje_Entry_Change_Info *info;
-
              _edje_entry_hide_visible_password(ed, en->rp);
              info = _text_filter_markup_prepend(ed, en, en->cursor,
                                               eina_strbuf_string_get(buf),
@@ -4387,14 +4387,13 @@ _edje_entry_imf_event_preedit_changed_cb(void *data, 
Ecore_IMF_Context *ctx EINA
                     en->pw_timer = ecore_timer_add
                         (_edje_password_show_last_timeout,
                         _password_timer_cb, en);
-                  free(info);
                }
           }
         else
-          _text_filter_markup_prepend(ed, en, en->cursor,
+          info = _text_filter_markup_prepend(ed, en, en->cursor,
                                       eina_strbuf_string_get(buf),
                                       NULL, NULL,
-                                      EINA_TRUE, EINA_FALSE);
+                                      EINA_TRUE, EINA_TRUE);
         eina_strbuf_free(buf);
      }
 
@@ -4425,7 +4424,8 @@ _edje_entry_imf_event_preedit_changed_cb(void *data, 
Ecore_IMF_Context *ctx EINA
 
    _edje_entry_imf_cursor_info_set(en);
    _anchors_get(en->cursor, rp->object, en);
-   _edje_emit(ed, "preedit,changed", rp->part->name);
+   _edje_emit_full(ed, "preedit,changed", rp->part->name, info,
+                   _free_entry_change_info);
    _edje_emit(ed, "cursor,changed", rp->part->name);
 
    /* delete attribute list */
diff --git a/src/lib/elementary/elm_entry.c b/src/lib/elementary/elm_entry.c
index 160a3bf..87c555f 100644
--- a/src/lib/elementary/elm_entry.c
+++ b/src/lib/elementary/elm_entry.c
@@ -2196,7 +2196,27 @@ _entry_preedit_changed_signal_cb(void *data,
                                  const char *emission EINA_UNUSED,
                                  const char *source EINA_UNUSED)
 {
+   char *text = NULL;
+   Edje_Entry_Change_Info *edje_info = (Edje_Entry_Change_Info *)
+                                  edje_object_signal_callback_extra_data_get();
    _entry_changed_handle(data, ELM_ENTRY_EVENT_PREEDIT_CHANGED);
+
+   if (_elm_config->atspi_mode)
+     {
+        Elm_Atspi_Text_Change_Info atspi_info;
+        if (edje_info && edje_info->insert)
+          {
+             text = elm_entry_markup_to_utf8(edje_info->change.insert.content);
+             atspi_info.content = text;
+             atspi_info.pos = edje_info->change.insert.pos;
+             atspi_info.len = edje_info->change.insert.plain_length;
+             
elm_interface_atspi_accessible_event_emit(ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN,
+                                                       data,
+                                                       
ELM_INTERFACE_ATSPI_TEXT_EVENT_ACCESS_TEXT_INSERTED,
+                                                       &atspi_info);
+             free(text);
+          }
+     }
 }
 
 static void

-- 


Reply via email to