Fix parent-children incosistencies in atspi tree 87/191687/6
authorRadoslaw Cybulski <r.cybulski@partner.samsung.com>
Mon, 22 Oct 2018 08:57:07 +0000 (10:57 +0200)
committerRadoslaw Cybulski <r.cybulski@partner.samsung.com>
Wed, 24 Oct 2018 08:56:35 +0000 (10:56 +0200)
Fixes incosistencies (where obj A was child of object B, but object B's
parent was different, than A) in atspi tree. Now atspi parent is
retrieved by calling efl_access_object_access_parent_set.

Change-Id: I3e20af88bd7f066f3f9faa5185e4028d0e5e05db

20 files changed:
src/lib/elementary/efl_access_object.c
src/lib/elementary/efl_access_object.eo
src/lib/elementary/efl_ui_view_list.c
src/lib/elementary/efl_ui_widget.c
src/lib/elementary/efl_ui_win.c
src/lib/elementary/elc_hoversel.c
src/lib/elementary/elc_multibuttonentry.c
src/lib/elementary/elc_naviframe.c
src/lib/elementary/elm_atspi_app_object.c
src/lib/elementary/elm_atspi_bridge.c
src/lib/elementary/elm_atspi_ewk_wrapper.c
src/lib/elementary/elm_colorselector.c
src/lib/elementary/elm_entry.c
src/lib/elementary/elm_gengrid.c
src/lib/elementary/elm_index.c
src/lib/elementary/elm_list.c
src/lib/elementary/elm_menu.c
src/lib/elementary/elm_toolbar.c
src/lib/elementary_tizen/elc_ctxpopup.c
src/lib/elementary_tizen/elm_genlist.c

index f266c42..5ad4587 100644 (file)
@@ -163,6 +163,10 @@ struct _Efl_Access_Object_Data
    const char    *translation_domain;
    Efl_Access_Role role;
    Efl_Access_Reading_Info_Type_Mask reading_info;
+
+   //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+   Eo *parent;
+   //
 };
 
 typedef struct _Efl_Access_Object_Data Efl_Access_Object_Data;
@@ -175,10 +179,12 @@ EOLIAN static int
 _efl_access_object_index_in_parent_get(const Eo *obj, Efl_Access_Object_Data *pd EINA_UNUSED)
 {
    Eina_List *l, *children = NULL;
-   Eo *chld, *parent = NULL;
+   Eo *chld;
    int ret = 0;
 
-   parent = efl_provider_find(efl_parent_get(obj), EFL_ACCESS_OBJECT_MIXIN);
+   //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+   Eo *parent = efl_access_object_access_parent_get(obj);
+   //
    if (!parent) return -1;
 
    children = efl_access_object_access_children_get(parent);
@@ -199,15 +205,19 @@ _efl_access_object_index_in_parent_get(const Eo *obj, Efl_Access_Object_Data *pd
    return ret;
 }
 
-
-EOLIAN static Efl_Object *
-_efl_access_object_efl_object_provider_find(const Eo *obj, Efl_Access_Object_Data *pd EINA_UNUSED, const Efl_Object *klass)
+//TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+EOLIAN static Eo *
+_efl_access_object_access_parent_get(const Eo *obj, Efl_Access_Object_Data *pd EINA_UNUSED)
 {
-   if (efl_isa(obj, klass))
-     return (Eo*)obj;
+  return pd->parent;
+}
 
-   return efl_provider_find(efl_super(obj, EFL_ACCESS_OBJECT_MIXIN), klass);
+EOLIAN static void
+_efl_access_object_access_parent_set(Eo *obj, Efl_Access_Object_Data *pd EINA_UNUSED, Eo *parent)
+{
+  pd->parent = parent;
 }
+//
 
 EOLIAN Eina_List*
 _efl_access_object_attributes_get(const Eo *obj EINA_UNUSED, Efl_Access_Object_Data *pd)
@@ -466,7 +476,12 @@ _efl_access_object_access_children_get(const Eo *obj, Efl_Access_Object_Data *pd
    EINA_ITERATOR_FOREACH(iter, chld)
      {
         if (efl_isa(chld, EFL_ACCESS_OBJECT_MIXIN))
-          children = eina_list_append(children, chld);
+          {
+            children = eina_list_append(children, chld);
+            //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+            efl_access_object_access_parent_set(chld, obj);
+            //
+          }
      }
    eina_iterator_free(iter);
 
@@ -973,7 +988,9 @@ elm_atspi_accessible_parent_set(Elm_Interface_Atspi_Accessible *obj, Elm_Interfa
 EAPI Elm_Interface_Atspi_Accessible *
 elm_atspi_accessible_parent_get(const Elm_Interface_Atspi_Accessible *obj)
 {
-   return efl_provider_find(efl_parent_get(obj), EFL_ACCESS_OBJECT_MIXIN);
+   //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+   return efl_access_object_access_parent_get(obj);
+   //
 }
 
 EAPI Elm_Atspi_State_Set
index 86f9e35..983e41f 100644 (file)
@@ -368,6 +368,18 @@ mixin Efl.Access.Object (Efl.Interface, Efl.Object)
             role: Efl.Access.Role; [[Accessible role]]
          }
       }
+      //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+      @property access_parent {
+         [[Gets object's accessible parent.]]
+         get {
+         }
+         set {
+         }
+         values {
+            parent: Efl.Access.Object; [[Accessible parent]]
+         }
+      }
+      //
       //TIZEN_ONLY(20190922): add name callback, description callback.
       @property description_cb {
          set {
@@ -623,7 +635,6 @@ mixin Efl.Access.Object (Efl.Interface, Efl.Object)
    }
    implements {
       Efl.Object.destructor;
-      Efl.Object.provider_find;
    }
    events {
       property,changed: string; [[Called when property has changed]]
index 09562be..57fa3fe 100644 (file)
@@ -922,6 +922,12 @@ _efl_ui_view_list_efl_access_object_access_children_get(const Eo *obj, Efl_Ui_Vi
    Eina_List *ret = NULL, *ret2 = NULL;
 
    ret = efl_ui_view_list_relayout_elements_get(pd->relayout);
+
+   //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+   Eo *it;
+   EINA_LIST_FOREACH(ret, ret2, it)
+     efl_access_object_access_parent_set(it, obj);
+   //
    ret2 = efl_access_object_access_children_get(efl_super(obj, EFL_UI_VIEW_LIST_CLASS));
 
    return eina_list_merge(ret, ret2);
index 2037350..6970cb4 100644 (file)
@@ -1815,6 +1815,9 @@ _efl_ui_widget_widget_sub_object_add(Eo *obj, Elm_Widget_Smart_Data *sd, Evas_Ob
      }
    sd->subobjs = eina_list_append(sd->subobjs, sobj);
    evas_object_data_set(sobj, "elm-parent", obj);
+   //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+   efl_access_object_access_parent_set(sobj, obj);
+   //
 
    _callbacks_add(sobj, obj);
    if (_elm_widget_is(sobj))
@@ -1884,6 +1887,9 @@ _efl_ui_widget_widget_sub_object_del(Eo *obj, Elm_Widget_Smart_Data *sd, Evas_Ob
    EINA_SAFETY_ON_TRUE_RETURN_VAL(obj == sobj, EINA_FALSE);
 
    sobj_parent = evas_object_data_del(sobj, "elm-parent");
+   //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+   efl_access_object_access_parent_set(sobj, NULL);
+   //
    if (sobj_parent && sobj_parent != obj)
      {
         static int abort_on_warn = -1;
index 186e87b..1ad8c80 100644 (file)
@@ -6724,6 +6724,11 @@ _efl_ui_win_efl_object_constructor(Eo *obj, Efl_Ui_Win_Data *pd)
    if (!efl_parent_get(obj))
      efl_allow_parent_unref_set(obj, EINA_TRUE);
 
+   //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+   Eo *root = efl_access_object_access_root_get(EFL_ACCESS_OBJECT_MIXIN);
+   efl_access_object_access_parent_set(obj, root);
+   //
+
    return obj;
 }
 
index 1502c67..88eeff5 100644 (file)
@@ -1113,6 +1113,13 @@ _elm_hoversel_efl_access_object_access_children_get(const Eo *obj EINA_UNUSED, E
    //TIZEN_ONLY(20161121): Added hover object in children list
    //return eina_list_clone(pd->items);
    Eina_List *ret = NULL;
+
+   //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+   Eo *it;
+   EINA_LIST_FOREACH(pd->items, ret, it)
+     efl_access_object_access_parent_set(it, obj);
+   //
+
    ret = efl_access_object_access_children_get(efl_super(obj, ELM_HOVERSEL_CLASS));
    ret = eina_list_merge(ret, eina_list_clone(pd->items));
 
index 4d558bf..9635fcf 100644 (file)
@@ -2309,12 +2309,25 @@ _elm_multibuttonentry_efl_access_object_access_children_get(const Eo *obj, Elm_M
    */
 
    Eina_List *ret = NULL;
+
+   //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+   Eo *it;
+   EINA_LIST_FOREACH(sd->items, ret, it)
+     efl_access_object_access_parent_set(it, obj);
+   //
+
    //TIZEN_ONLY(20160527) : Improve MBE atspi support
    if (sd->label && sd->label_packed)
-     ret = eina_list_append(ret, sd->label_access);
+     {
+       ret = eina_list_append(ret, sd->label_access);
+       efl_access_object_access_parent_set(sd->label_access, obj);
+     }
    ret = eina_list_merge(ret, eina_list_clone(sd->items));
    if (sd->editable && (sd->view_state != MULTIBUTTONENTRY_VIEW_SHRINK))
-     ret = eina_list_append(ret, sd->box);
+     {
+       ret = eina_list_append(ret, sd->box);
+       efl_access_object_access_parent_set(sd->box, obj);
+     }
    //
    return ret;
 }
index e42e336..0bf3f51 100644 (file)
@@ -2419,6 +2419,10 @@ _elm_naviframe_item_efl_access_object_access_children_get(const Eo *eo_item EINA
 {
    Eina_List *ret = NULL;
 
+   //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+   efl_access_object_access_parent_set(VIEW(nit), eo_item);
+   //
+
    ret = eina_list_append(ret, VIEW(nit));
    return ret;
 }
index 983da98..675ab21 100644 (file)
@@ -44,8 +44,13 @@ _elm_atspi_app_object_efl_access_object_access_children_get(const Eo *obj EINA_U
         */
         //TIZEN_ONLY(20171108): make atspi_proxy work
         if (elm_win_type_get(win) != ELM_WIN_SOCKET_IMAGE)
+          {
         //
-          accs = eina_list_append(accs, win);
+            accs = eina_list_append(accs, win);
+            //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+            efl_access_object_access_parent_set(win, obj);
+            //
+          }
      }
 
    return accs;
index e30252c..ff2a177 100644 (file)
@@ -665,6 +665,11 @@ _accessible_get_children(const Eldbus_Service_Interface *iface, const Eldbus_Mes
      {
         _bridge_iter_object_reference_append(bridge, iter_array, children);
         _bridge_object_register(bridge, children);
+        //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+        Eo *parent = efl_access_object_access_parent_get(children);
+        if (parent != obj)
+          ERR("parent mismatch for object %p, should be %p, is %p", children, obj, parent);
+        //
      }
 
    eldbus_message_iter_container_close(iter, iter_array);
@@ -895,6 +900,12 @@ _accessible_child_at_index(const Eldbus_Service_Interface *iface EINA_UNUSED, co
    child = eina_list_nth(children, idx);
    _bridge_iter_object_reference_append(bridge, iter, child);
    _bridge_object_register(bridge, child);
+   //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+   Eo *parent = efl_access_object_access_parent_get(child);
+   if (parent != obj)
+     ERR("parent mismatch for object %p, should be %p, is %p", child, obj, parent);
+   //
+
    eina_list_free(children);
 
    return ret;
@@ -2912,6 +2923,21 @@ _bridge_object_from_path(Eo *bridge, const char *path)
    return ret;
 }
 
+//TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+static Eo *
+_get_accessible_parent(const Eo *eo)
+{
+  if (!eo) return NULL;
+  Eo *parent = efl_access_object_access_parent_get(eo);
+  if (parent) return parent;
+
+  Efl_Access_Role role = efl_access_object_role_get(eo);
+  if (role != EFL_ACCESS_ROLE_APPLICATION)
+    ERR("object %p has no parent, but is not an application!", eo);
+  return NULL;
+}
+//
+
 static const char *
 _path_from_object(const Eo *eo)
 {
@@ -2958,10 +2984,10 @@ _accessible_property_get(const Eldbus_Service_Interface *interface, const char *
      }
    else if (!strcmp(property, "Parent"))
      {
-       ret_obj = efl_provider_find(efl_parent_get(obj), EFL_ACCESS_OBJECT_MIXIN);
-       Efl_Access_Role role = EFL_ACCESS_ROLE_INVALID;
-       role = efl_access_object_role_get(obj);
-       if ((!ret_obj) && (EFL_ACCESS_ROLE_APPLICATION == role))
+       //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+       ret_obj = _get_accessible_parent(obj);
+       //
+       if (!ret_obj)
          _object_desktop_reference_append(iter);
        else
          _bridge_iter_object_reference_append(bridge, iter, ret_obj);
@@ -3685,7 +3711,9 @@ _collection_sort_order_reverse_canonical(struct collection_match_rule *rule, Ein
 
   /* Get the current nodes index in it's parent and the parent object. */
   indexinparent = efl_access_object_index_in_parent_get(obj);
-  parent = efl_provider_find(efl_parent_get(obj), EFL_ACCESS_OBJECT_MIXIN);
+  //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+  parent = _get_accessible_parent(obj);
+  //
 
   if ((indexinparent > 0) && ((max == 0) || (count < max)))
     {
@@ -3740,8 +3768,9 @@ _collection_inorder(Eo *collection, struct collection_match_rule *rule, Eina_Lis
 
   while ((max == 0 || count < max) && obj && obj != collection)
     {
-       Eo *parent;
-       parent = efl_provider_find(efl_parent_get(obj), EFL_ACCESS_OBJECT_MIXIN);
+       //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+       Eo *parent = _get_accessible_parent(obj);
+       //
        idx = efl_access_object_index_in_parent_get(obj);
        count = _collection_sort_order_canonical(rule, list, count, max, parent,
                                      idx + 1, EINA_TRUE, NULL, EINA_TRUE, traverse);
@@ -3819,7 +3848,9 @@ _collection_get_matches_from_handle(Eo *collection, Eo *current, struct collecti
          break;
       case ATSPI_Collection_TREE_RESTRICT_CHILDREN:
          idx = efl_access_object_index_in_parent_get(current);
-         parent = efl_provider_find(efl_parent_get(current), EFL_ACCESS_OBJECT_MIXIN);
+         //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+         parent = _get_accessible_parent(current);
+         //
          _collection_query(rule, sortby, &result, 0, max, parent, idx, EINA_FALSE, NULL, EINA_TRUE, traverse);
          break;
       case ATSPI_Collection_TREE_RESTRICT_SIBLING:
@@ -3880,7 +3911,9 @@ _collection_get_matches_to_handle(Eo *obj, Eo *current, struct collection_match_
    Eo *collection = obj;
 
    if (limit)
-     collection = efl_provider_find(efl_parent_get(obj), EFL_ACCESS_OBJECT_MIXIN);
+     //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+     collection = _get_accessible_parent(obj);
+     //
 
    switch (tree)
      {
@@ -4105,10 +4138,11 @@ _cache_item_reference_append_cb(Eo *bridge, Eo *data, Eldbus_Message_Iter *iter_
    /* Marshall application */
    _bridge_iter_object_reference_append(bridge, iter_struct, root);
 
-   Eo *parent = NULL;
-   parent = efl_provider_find(efl_parent_get(data), EFL_ACCESS_OBJECT_MIXIN);
+   //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+   Eo *parent = _get_accessible_parent(data);
+   //
    /* Marshall parent */
-   if ((!parent) && (EFL_ACCESS_ROLE_APPLICATION == role))
+   if (!parent)
      _object_desktop_reference_append(iter_struct);
    else
      _bridge_iter_object_reference_append(bridge, iter_struct, parent);
@@ -4450,13 +4484,16 @@ static unsigned char _accept_object(accessibility_navigation_pointer_table *tabl
 /* The target cannot be a parent of root */
 static Eina_Bool _target_validation_check(Eo *target, Eo *root)
 {
-   Eo *parent;
-   parent = efl_provider_find(efl_parent_get(root), EFL_ACCESS_OBJECT_MIXIN);
+   //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+   Eo *parent = _get_accessible_parent(root);
+   //
 
    while (parent)
      {
         if (parent == target) return EINA_FALSE;
-        parent = efl_provider_find(efl_parent_get(parent), EFL_ACCESS_OBJECT_MIXIN);
+        //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+        parent = _get_accessible_parent(parent);
+        //
      }
 
    return EINA_TRUE;
@@ -5000,8 +5037,10 @@ unsigned char _object_is_scrollable_impl(struct accessibility_navigation_pointer
 
 void *_get_parent_impl(struct accessibility_navigation_pointer_table *table EINA_UNUSED, void *ptr)
 {
-   Eo *obj = (Eo*)ptr, *ret_obj;
-   ret_obj = efl_provider_find(efl_parent_get(obj), EFL_ACCESS_OBJECT_MIXIN);
+   //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+   Eo *obj = (Eo*)ptr;
+   Eo *ret_obj = efl_access_object_access_parent_get(obj);
+   //
    return ret_obj;
 }
 
index 2db8d55..cbc2287 100644 (file)
@@ -133,9 +133,13 @@ EOLIAN static Eina_List*
 _elm_atspi_ewk_wrapper_efl_access_object_access_children_get(const Eo *obj EINA_UNUSED, Elm_Atspi_Ewk_Wrapper_Data *_pd)
 {
    if (_pd->proxy)
-     return eina_list_append(NULL, _pd->proxy);
-   else
-     return NULL;
+     {
+       //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+       efl_access_object_access_parent_set(_pd->proxy, obj);
+       //
+       return eina_list_append(NULL, _pd->proxy);
+     }
+   return NULL;
 }
 
 static void
index 3a4540a..4f00141 100644 (file)
@@ -2715,6 +2715,11 @@ EOLIAN static Eina_List*
 _elm_colorselector_efl_access_object_access_children_get(const Eo *obj EINA_UNUSED, Elm_Colorselector_Data *sd)
 {
    Eina_List *ret = NULL;
+   //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+   Eo *it;
+   EINA_LIST_FOREACH(sd->items, ret, it)
+     efl_access_object_access_parent_set(it, obj);
+   //
 
    ret = efl_access_object_access_children_get(efl_super(obj, ELM_COLORSELECTOR_CLASS));
    // filter - out box contiainer
index 9a83e8c..ab4758c 100644 (file)
@@ -8232,7 +8232,13 @@ _elm_entry_efl_access_object_access_children_get(const Eo *obj EINA_UNUSED, Elm_
    if (!sd->editable)
      {
         EINA_LIST_FOREACH(sd->anchor_atspi_rects, l, rect)
-          ret = eina_list_append(ret, elm_access_object_get(rect));
+          {
+            //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+            Eo *rect_eo = elm_access_object_get(rect);
+            ret = eina_list_append(ret, rect_eo);
+            efl_access_object_access_parent_set(rect_eo, obj);
+            //
+          }
      }
    return ret;
 }
index c31af7f..ae9b39d 100644 (file)
@@ -6831,6 +6831,12 @@ _elm_gengrid_efl_access_object_access_children_get(const Eo *obj, Elm_Gengrid_Da
           ret = eina_list_append(ret, EO_OBJ(it));
      }
 
+   //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+   Eo *it2;
+   EINA_LIST_FOREACH(ret, ret2, it2)
+     efl_access_object_access_parent_set(it2, obj);
+   //
+
    ret2 = efl_access_object_access_children_get(efl_super(obj, ELM_GENGRID_CLASS));
 
    return eina_list_merge(ret, ret2);
@@ -7086,6 +7092,9 @@ _elm_gengrid_item_efl_access_object_access_children_get(const Eo *eo_it EINA_UNU
              if (part && efl_isa(part, EFL_ACCESS_OBJECT_MIXIN))
                {
                   ret = eina_list_append(ret, part);
+                  //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+                  efl_access_object_access_parent_set(part, eo_it);
+                  //
                   efl_parent_set(part, eo_it);
                }
           }
index 985fb52..fd84a25 100644 (file)
@@ -1779,6 +1779,12 @@ EOLIAN static Eina_List*
 _elm_index_efl_access_object_access_children_get(const Eo *obj, Elm_Index_Data *data)
 {
    Eina_List *ret;
+   //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+   Eo *it;
+   EINA_LIST_FOREACH(data->items, ret, it)
+     efl_access_object_access_parent_set(it, obj);
+   //
+
    ret = efl_access_object_access_children_get(efl_super(obj, ELM_INDEX_CLASS));
    return eina_list_merge(eina_list_clone(data->items), ret);
 }
index ca5e215..31d72c3 100644 (file)
@@ -2120,6 +2120,10 @@ _elm_list_item_elm_widget_item_del_pre(Eo *eo_item EINA_UNUSED, Elm_List_Item_Da
    item->deleted = EINA_TRUE;
 
    sd->items = eina_list_remove_list(sd->items, item->node);
+   //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+   evas_object_data_del(item->node, "elm-parent");
+   efl_access_object_access_parent_set(item->node, NULL);
+   //
    item->node = NULL;
 }
 
@@ -2845,6 +2849,10 @@ _elm_list_item_append(Eo *obj, Elm_List_Data *sd, const char *label, Evas_Object
    it = _item_new(obj, label, icon, end, func, data);
 
    sd->items = eina_list_append(sd->items, EO_OBJ(it));
+   //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+   evas_object_data_set(EO_OBJ(it), "elm-parent", obj);
+   efl_access_object_access_parent_set(EO_OBJ(it), obj);
+   //
    it->node = eina_list_last(sd->items);
    elm_box_pack_end(sd->box, VIEW(it));
 
@@ -2862,6 +2870,10 @@ _elm_list_item_prepend(Eo *obj, Elm_List_Data *sd, const char *label, Evas_Objec
    it = _item_new(obj, label, icon, end, func, data);
 
    sd->items = eina_list_prepend(sd->items, EO_OBJ(it));
+   //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+   evas_object_data_set(EO_OBJ(it), "elm-parent", obj);
+   efl_access_object_access_parent_set(EO_OBJ(it), obj);
+   //
    it->node = sd->items;
    elm_box_pack_start(sd->box, VIEW(it));
 
@@ -2884,6 +2896,10 @@ _elm_list_item_insert_before(Eo *obj, Elm_List_Data *sd, Elm_Object_Item *eo_bef
 
    it = _item_new(obj, label, icon, end, func, data);
    sd->items = eina_list_prepend_relative_list(sd->items, EO_OBJ(it), before_it->node);
+   //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+   evas_object_data_set(EO_OBJ(it), "elm-parent", obj);
+   efl_access_object_access_parent_set(EO_OBJ(it), obj);
+   //
    it->node = before_it->node->prev;
    elm_box_pack_before(sd->box, VIEW(it), VIEW(before_it));
 
@@ -2906,6 +2922,10 @@ _elm_list_item_insert_after(Eo *obj, Elm_List_Data *sd, Elm_Object_Item *eo_afte
 
    it = _item_new(obj, label, icon, end, func, data);
    sd->items = eina_list_append_relative_list(sd->items, EO_OBJ(it), after_it->node);
+   //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+   evas_object_data_set(EO_OBJ(it), "elm-parent", obj);
+   efl_access_object_access_parent_set(EO_OBJ(it), obj);
+   //
    it->node = after_it->node->next;
    elm_box_pack_after(sd->box, VIEW(it), VIEW(after_it));
 
@@ -2924,6 +2944,10 @@ _elm_list_item_sorted_insert(Eo *obj, Elm_List_Data *sd, const char *label, Evas
    it = _item_new(obj, label, icon, end, func, data);
 
    sd->items = eina_list_sorted_insert(sd->items, cmp_func, EO_OBJ(it));
+   //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+   evas_object_data_set(EO_OBJ(it), "elm-parent", obj);
+   efl_access_object_access_parent_set(EO_OBJ(it), obj);
+   //
    l = eina_list_data_find_list(sd->items, EO_OBJ(it));
    l = eina_list_next(l);
    if (!l)
@@ -3239,6 +3263,12 @@ EOLIAN Eina_List*
 _elm_list_efl_access_object_access_children_get(const Eo *obj, Elm_List_Data *pd)
 {
    Eina_List *ret;
+   //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+   Eo *it;
+   EINA_LIST_FOREACH(pd->items, ret, it)
+     efl_access_object_access_parent_set(it, obj);
+   //
+
    ret = efl_access_object_access_children_get(efl_super(obj, ELM_LIST_CLASS));
    return eina_list_merge(eina_list_clone(pd->items), ret);
 }
index 3040c08..3aa9eff 100644 (file)
@@ -1313,6 +1313,12 @@ EOLIAN static Eina_List*
 _elm_menu_efl_access_object_access_children_get(const Eo *obj, Elm_Menu_Data *sd)
 {
    Eina_List *ret;
+   //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+   Eo *it;
+   EINA_LIST_FOREACH(sd->items, ret, it)
+     efl_access_object_access_parent_set(it, obj);
+   //
+
    ret = efl_access_object_access_children_get(efl_super(obj, ELM_MENU_CLASS));
    return eina_list_merge(eina_list_clone(sd->items), ret);
 }
@@ -1320,6 +1326,13 @@ _elm_menu_efl_access_object_access_children_get(const Eo *obj, Elm_Menu_Data *sd
 EOLIAN static Eina_List*
 _elm_menu_item_efl_access_object_access_children_get(const Eo *obj EINA_UNUSED, Elm_Menu_Item_Data *sd)
 {
+   //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+   Eina_List *ret;
+   Eo *it;
+   EINA_LIST_FOREACH(sd->submenu.items, ret, it)
+     efl_access_object_access_parent_set(it, obj);
+   //
+
    return eina_list_clone(sd->submenu.items);
 }
 
index c7a1d03..ed06332 100644 (file)
@@ -4238,7 +4238,12 @@ _elm_toolbar_efl_access_object_access_children_get(const Eo *obj EINA_UNUSED, El
    ret2 = efl_access_object_access_children_get(efl_super(obj, ELM_TOOLBAR_CLASS));
 
    EINA_INLIST_FOREACH(sd->items, it)
-      ret = eina_list_append(ret, EO_OBJ(it));
+     {
+       ret = eina_list_append(ret, EO_OBJ(it));
+       //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+       efl_access_object_access_parent_set(EO_OBJ(it), obj);
+       //
+     }
 
    return eina_list_merge(ret, ret2);
 }
index 0cf7ccb..1c75792 100644 (file)
@@ -2758,7 +2758,12 @@ _elm_ctxpopup_efl_access_object_access_children_get(const Eo *eo_item EINA_UNUSE
    Elm_Ctxpopup_Item_Data *it;
 
    EINA_LIST_FOREACH(sd->items, l, it)
-      ret = eina_list_append(ret, EO_OBJ(it));
+     {
+       ret = eina_list_append(ret, EO_OBJ(it));
+       //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+       efl_access_object_access_parent_set(EO_OBJ(it), eo_item);
+       //
+     }
 
    return ret;
 }
index ed96938..414fea4 100644 (file)
@@ -9276,8 +9276,11 @@ _elm_genlist_item_efl_access_object_access_children_get(const Eo *eo_it EINA_UNU
              part = edje_object_part_swallow_get(VIEW(it), key);
              if (part && efl_isa(part, EFL_ACCESS_OBJECT_MIXIN))
                {
-                  ret = eina_list_append(ret, part);
-                  efl_parent_set(part, eo_it);
+                 ret = eina_list_append(ret, part);
+                 efl_parent_set(part, eo_it);
+                 //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
+                 efl_access_object_access_parent_set(part, eo_it);
+                 //
                }
           }
      }
@@ -9454,14 +9457,23 @@ _elm_genlist_efl_access_widget_action_elm_actions_get(const Eo *obj EINA_UNUSED,
 EOLIAN Eina_List*
 _elm_genlist_efl_access_object_access_children_get(const Eo *obj, Elm_Genlist_Data *sd)
 {
-   Eina_List *ret = NULL, *ret2 = NULL;
+   Eina_List *ret = NULL, *ret2 = NULL, *ret3;
    Elm_Gen_Item *it;
 
    EINA_INLIST_FOREACH(sd->items, it)
-      ret = eina_list_append(ret, EO_OBJ(it));
+   {
+     ret = eina_list_append(ret, EO_OBJ(it));
+     efl_access_object_access_parent_set(EO_OBJ(it), obj);
+   }
 
    ret2 = efl_access_object_access_children_get(efl_super(obj, ELM_GENLIST_CLASS));
 
+   Eo *eo;
+   EINA_LIST_FOREACH(ret2, ret3, eo)
+   {
+     efl_access_object_access_parent_set(eo, obj);
+   }
+
    return eina_list_merge(ret, ret2);
 }