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;
_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);
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)
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);
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
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 {
}
implements {
Efl.Object.destructor;
- Efl.Object.provider_find;
}
events {
property,changed: string; [[Called when property has changed]]
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);
}
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))
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;
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;
}
//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));
*/
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;
}
{
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;
}
*/
//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;
{
_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);
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;
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)
{
}
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);
/* 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)))
{
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);
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:
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)
{
/* 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);
/* 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;
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;
}
_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
_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
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;
}
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);
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);
}
}
_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);
}
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;
}
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));
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));
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));
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));
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)
_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);
}
_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);
}
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);
}
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);
}
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;
}
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);
+ //
}
}
}
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);
}