[elm_popup][atspi] expose part-text as at-spi object 55/118855/3
authorJunsuChoi <jsuya.choi@samsung.com>
Tue, 14 Mar 2017 09:13:43 +0000 (18:13 +0900)
committerJunsuChoi <jsuya.choi@samsung.com>
Tue, 14 Mar 2017 10:05:18 +0000 (19:05 +0900)
   Create an access object for the popup's elm.text. by default.
   Because Application user can not access the edje object in elm.text.
   Therefore, they can not create an access object for elm.text part.

Change-Id: Ie79cc9ee9e3a96529f3760159856563ca5216dca

src/lib/elc_popup.c

index 062b681e4ba582a204f30edb364bdc5678cb3bf7..287bdb23dc47f63021d212ce19d43a10a4d1cd3c 100644 (file)
@@ -435,6 +435,44 @@ _atspi_expose_title(Eo *obj, Eina_Bool is_atspi)
 }
 //
 
+//TIZEN_ONLY(20170314): expose part-text as at-spi object
+static char *
+_access_name_set_cb(void *data, Evas_Object *obj EINA_UNUSED)
+{
+   char *text = data;
+   if (text)
+      return strdup(text);
+   return NULL;
+}
+
+static void
+_atspi_part_text_expose(Eo *obj, const char *part, Eina_Bool is_atspi)
+{
+   Evas_Object *ao = NULL;
+   ELM_POPUP_DATA_GET(obj, sd);
+   const char *text = NULL;
+   text = elm_layout_text_get(sd->main_layout, part);
+
+   if (text && is_atspi)
+     {
+        ao = _access_object_get(obj, part);
+        if (!ao)
+          {
+             ao = _elm_access_edje_object_part_object_register
+                   (sd->main_layout, elm_layout_edje_get(sd->main_layout), part);
+             elm_atspi_accessible_role_set(ao, ELM_ATSPI_ROLE_LABEL);
+             elm_atspi_accessible_name_cb_set(ao, _access_name_set_cb, text);
+          }
+     }
+   else
+     {
+        ao = _access_object_get(obj, part);
+        if (ao)
+          _elm_access_object_unregister(ao, NULL);
+     }
+}
+//
+
 static void
 _access_obj_process(Eo *obj, Eina_Bool is_access)
 {
@@ -1420,8 +1458,12 @@ _elm_popup_elm_layout_text_set(Eo *obj, Elm_Popup_Data *_pd, const char *part, c
      int_ret = _subtitle_text_set(obj, label);
    //
    else
-     int_ret = elm_layout_text_set(_pd->main_layout, part, label);
-
+     {
+        int_ret = elm_layout_text_set(_pd->main_layout, part, label);
+        //TIZEN_ONLY(20170314): expose part-text as at-spi object
+        _atspi_part_text_expose(obj, part,_elm_atspi_enabled());
+        //
+     }
    _scroller_size_calc(obj);
    elm_layout_sizing_eval(obj);
 
@@ -2115,6 +2157,9 @@ EOLIAN static void
 _elm_popup_elm_widget_atspi(Eo *obj, Elm_Popup_Data *_pd EINA_UNUSED, Eina_Bool is_atspi)
 {
    _atspi_expose_title(obj, is_atspi);
+   //TIZEN_ONLY(20170314): expose part-text as at-spi object
+   _atspi_part_text_expose(obj, "elm.text", is_atspi);
+   //
 
    //TIZEN_ONLY(20161213): apply screen_reader_changed callback
    evas_object_smart_callback_call(obj, SIG_ATSPI_SCREEN_READER_CHANGED, &is_atspi);