efl.access: remove parent property

most of this is just a reimplementation of efl_provider_find
This commit is contained in:
Mike Blumenkrantz 2018-02-14 21:14:52 -05:00
parent 8b7bbb2398
commit f8e93775c0
16 changed files with 53 additions and 101 deletions

View File

@ -146,7 +146,7 @@ _efl_access_index_in_parent_get(Eo *obj, Efl_Access_Data *pd EINA_UNUSED)
Eo *chld, *parent = NULL;
int ret = 0;
parent = efl_access_parent_get(obj);
parent = efl_provider_find(efl_parent_get(obj), EFL_ACCESS_MIXIN);
if (!parent) return -1;
children = efl_access_children_get(parent);
@ -167,29 +167,20 @@ _efl_access_index_in_parent_get(Eo *obj, Efl_Access_Data *pd EINA_UNUSED)
return ret;
}
EOLIAN static Efl_Access *
_efl_access_parent_get(Eo *obj EINA_UNUSED, Efl_Access_Data *pd EINA_UNUSED)
EOLIAN static Efl_Object *
_efl_access_efl_object_provider_find(const Eo *obj, Efl_Access_Data *pd EINA_UNUSED, const Efl_Object *klass)
{
Efl_Access_Type type;
Eo *parent = obj;
do {
parent = efl_parent_get(obj);
if (efl_isa(parent, EFL_ACCESS_MIXIN))
{
type = efl_access_type_get(parent);
if (type != EFL_ACCESS_TYPE_SKIPPED) break;
}
} while (parent);
return efl_isa(parent, EFL_ACCESS_MIXIN) ? parent : NULL;
}
EOLIAN static void
_efl_access_parent_set(Eo *obj, Efl_Access_Data *pd EINA_UNUSED, Efl_Access *new_parent EINA_UNUSED)
{
WRN("The %s object does not implement the \"accessible_parent_set\" function.",
efl_class_name_get(efl_class_get(obj)));
if (efl_isa(obj, klass))
{
if (klass == EFL_ACCESS_MIXIN)
{
Efl_Access_Type type = efl_access_type_get(obj);
if (type != EFL_ACCESS_TYPE_SKIPPED) return (Eo*)obj;
}
else return (Eo*)obj;
}
return efl_provider_find(efl_super(obj, EFL_ACCESS_MIXIN), klass);
}
EOLIAN Eina_List*
@ -674,7 +665,7 @@ _efl_access_type_set(Eo *obj, Efl_Access_Data *pd, Efl_Access_Type val)
if (val == pd->type)
return;
parent = efl_access_parent_get(obj);
parent = efl_provider_find(efl_parent_get(obj), EFL_ACCESS_MIXIN);
switch (val)
{

View File

@ -353,16 +353,6 @@ mixin Efl.Access (Efl.Interface, Efl.Object)
description: string; [[Accessible contextual information]]
}
}
@property parent @beta {
[[Object's accessible parent.]]
get {
}
set {
}
values {
parent: Efl.Access; [[Accessible parent]]
}
}
@property state_set @protected @beta {
[[Gets set describing object accessible states.]]
get {
@ -469,6 +459,7 @@ mixin Efl.Access (Efl.Interface, Efl.Object)
}
implements {
Efl.Object.destructor;
Efl.Object.provider_find;
}
events {
property,changed: string; [[Called when property has changed]]

View File

@ -1565,7 +1565,7 @@ _efl_ui_widget_widget_sub_object_add(Eo *obj, Elm_Widget_Smart_Data *sd, Evas_Ob
if (_elm_config->atspi_mode && !sd->on_create)
{
Efl_Access *aparent;
aparent = efl_access_parent_get(sobj);
aparent = efl_provider_find(efl_parent_get(sobj), EFL_ACCESS_MIXIN);
if (aparent)
efl_access_children_changed_added_signal_emit(aparent, sobj);
}
@ -1643,7 +1643,7 @@ _efl_ui_widget_widget_sub_object_del(Eo *obj, Elm_Widget_Smart_Data *sd, Evas_Ob
if (_elm_config->atspi_mode && !sd->on_destroy)
{
Efl_Access *aparent;
aparent = efl_access_parent_get(sobj);
aparent = efl_provider_find(efl_parent_get(sobj), EFL_ACCESS_MIXIN);
if (aparent)
efl_access_children_changed_del_signal_emit(aparent, sobj);
}
@ -5407,21 +5407,6 @@ _efl_ui_widget_efl_access_children_get(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Dat
return accs;
}
EOLIAN static Eo*
_efl_ui_widget_efl_access_parent_get(Eo *obj, Elm_Widget_Smart_Data *pd EINA_UNUSED)
{
Efl_Access_Type type;
Efl_Access *parent = obj;
do {
ELM_WIDGET_DATA_GET_OR_RETURN(parent, wd, NULL);
parent = wd->parent_obj;
type = efl_access_type_get(parent);
} while (parent && (type == EFL_ACCESS_TYPE_SKIPPED));
return efl_isa(parent, EFL_ACCESS_MIXIN) ? parent : NULL;
}
EOLIAN static Efl_Access_State_Set
_efl_ui_widget_efl_access_state_set_get(Eo *obj, Elm_Widget_Smart_Data *pd EINA_UNUSED)
{
@ -5573,6 +5558,13 @@ _efl_ui_widget_efl_object_provider_find(const Eo *obj, Elm_Widget_Smart_Data *pd
if ((klass == EFL_CONFIG_INTERFACE) || (klass == EFL_CONFIG_GLOBAL_CLASS))
return _efl_config_obj;
if (klass == EFL_ACCESS_MIXIN)
{
Efl_Access_Type type = efl_access_type_get(obj);
if (type != EFL_ACCESS_TYPE_SKIPPED)
return (Eo*)obj;
}
if (pd->provider_lookup) return NULL;
pd->provider_lookup = EINA_TRUE;

View File

@ -588,7 +588,6 @@ abstract Efl.Ui.Widget (Efl.Canvas.Group, Efl.Access,
Efl.Access.i18n_name { get; }
Efl.Access.state_set { get; }
Efl.Access.children { get; }
Efl.Access.parent { get; }
Efl.Access.attributes { get; }
Efl.Access.Component.focus_grab;
Efl.Ui.Focus.Object.focus_manager { get; }

View File

@ -6984,15 +6984,6 @@ _efl_ui_win_efl_object_debug_name_override(Eo *obj, Efl_Ui_Win_Data *pd, Eina_St
eina_strbuf_append_printf(sb, ":'%s':'%s'", pd->name, pd->title);
}
EOLIAN static Eo*
_efl_ui_win_efl_access_parent_get(Eo *obj EINA_UNUSED, Efl_Ui_Win_Data *sd EINA_UNUSED)
{
// attach all kinds of windows directly to ATSPI application root object
Eo *root;
root = efl_access_root_get(EFL_ACCESS_MIXIN);
return root;
}
EOLIAN static const Efl_Access_Action_Data*
_efl_ui_win_efl_access_widget_action_elm_actions_get(Eo *obj EINA_UNUSED, Efl_Ui_Win_Data *sd EINA_UNUSED)
{
@ -7077,6 +7068,9 @@ _efl_ui_win_efl_object_provider_find(const Eo *obj,
if (klass == EFL_UI_WIN_CLASS)
return (Eo *)obj;
// attach all kinds of windows directly to ATSPI application root object
if (klass == EFL_ACCESS_MIXIN) return efl_access_root_get(EFL_ACCESS_MIXIN);
if (klass == EFL_UI_FOCUS_PARENT_PROVIDER_INTERFACE)
return pd->provider;

View File

@ -771,6 +771,7 @@ class Efl.Ui.Win (Efl.Ui.Widget, Efl.Canvas, Efl.Canvas.Pointer, Efl.Access.Wind
class.constructor;
Efl.Object.constructor;
Efl.Object.destructor;
Efl.Object.provider_find;
Efl.Object.finalize;
Efl.Object.debug_name_override;
Efl.Gfx.visible { set; }
@ -787,7 +788,6 @@ class Efl.Ui.Win (Efl.Ui.Widget, Efl.Canvas, Efl.Canvas.Pointer, Efl.Access.Wind
Efl.Ui.Focus.Object.on_focus_update;
Efl.Ui.Widget.widget_event;
Efl.Ui.Widget.focus_manager_create;
Efl.Access.parent { get; }
Efl.Access.state_set { get; }
Efl.Access.i18n_name { get; }
Efl.Access.Component.extents { get; }
@ -818,7 +818,6 @@ class Efl.Ui.Win (Efl.Ui.Widget, Efl.Canvas, Efl.Canvas.Pointer, Efl.Access.Wind
Efl.Content.content { get; set; }
Efl.Content.content_unset;
Efl.Part.part;
Efl.Object.provider_find;
}
constructors {
.win_name;

View File

@ -2094,7 +2094,7 @@ _accessible_property_get(const Eldbus_Service_Interface *interface, const char *
}
else if (!strcmp(property, "Parent"))
{
ret_obj = efl_access_parent_get(obj);
ret_obj = efl_provider_find(efl_parent_get(obj), EFL_ACCESS_MIXIN);
Efl_Access_Role role = EFL_ACCESS_ROLE_INVALID;
role = efl_access_role_get(obj);
if ((!ret_obj) && (EFL_ACCESS_ROLE_APPLICATION == role))
@ -2821,7 +2821,7 @@ _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_index_in_parent_get(obj);
parent = efl_access_parent_get(obj);
parent = efl_provider_find(efl_parent_get(obj), EFL_ACCESS_MIXIN);
if ((indexinparent > 0) && ((max == 0) || (count < max)))
{
@ -2877,7 +2877,7 @@ _collection_inorder(Eo *collection, struct collection_match_rule *rule, Eina_Lis
while ((max == 0 || count < max) && obj && obj != collection)
{
Eo *parent;
parent = efl_access_parent_get(obj);
parent = efl_provider_find(efl_parent_get(obj), EFL_ACCESS_MIXIN);
idx = efl_access_index_in_parent_get(obj);
count = _collection_sort_order_canonical(rule, list, count, max, parent,
idx + 1, EINA_TRUE, NULL, EINA_TRUE, traverse);
@ -2955,7 +2955,7 @@ _collection_get_matches_from_handle(Eo *collection, Eo *current, struct collecti
break;
case ATSPI_Collection_TREE_RESTRICT_CHILDREN:
idx = efl_access_index_in_parent_get(current);
parent = efl_access_parent_get(current);
parent = efl_provider_find(efl_parent_get(current), EFL_ACCESS_MIXIN);
_collection_query(rule, sortby, &result, 0, max, parent, idx, EINA_FALSE, NULL, EINA_TRUE, traverse);
break;
case ATSPI_Collection_TREE_RESTRICT_SIBLING:
@ -3016,7 +3016,7 @@ _collection_get_matches_to_handle(Eo *obj, Eo *current, struct collection_match_
Eo *collection = obj;
if (limit)
collection = efl_access_parent_get(obj);
collection = efl_provider_find(efl_parent_get(obj), EFL_ACCESS_MIXIN);
switch (tree)
{
@ -3218,7 +3218,7 @@ _cache_item_reference_append_cb(Eo *bridge, Eo *data, Eldbus_Message_Iter *iter_
_bridge_iter_object_reference_append(bridge, iter_struct, root);
Eo *parent = NULL;
parent = efl_access_parent_get(data);
parent = efl_provider_find(efl_parent_get(data), EFL_ACCESS_MIXIN);
/* Marshall parent */
if ((!parent) && (EFL_ACCESS_ROLE_APPLICATION == role))
_object_desktop_reference_append(iter_struct);

View File

@ -3878,7 +3878,6 @@ _internal_elm_gengrid_clear(Evas_Object *obj,
if (itn) itn->walking++; /* prevent early death of subitem */
if (VIEW(it))
_item_mouse_callbacks_del(it, VIEW(it));
it->del_cb(it);
efl_del(EO_OBJ(it));
if (itn) itn->walking--;
}
@ -3949,7 +3948,6 @@ _item_select(Elm_Gen_Item *it)
{
if ((!it->walking) && (it->generation < sd->generation))
{
it->del_cb(it);
efl_del(eo_it);
sd->last_selected_item = NULL;
}
@ -3989,7 +3987,6 @@ _elm_gengrid_item_new(Elm_Gengrid_Data *sd,
it->func.func = func;
it->func.data = func_data;
it->del_cb = (Ecore_Cb)_item_del;
it->highlight_cb = (Ecore_Cb)_item_highlight;
it->unhighlight_cb = (Ecore_Cb)_item_unhighlight;
it->sel_cb = (Ecore_Cb)_item_select;

View File

@ -656,8 +656,6 @@ _elm_list_deletions_process(Elm_List_Data *sd)
{
sd->items = eina_list_remove_list(sd->items, it->node);
/* issuing free because of "locking" item del pre hook */
_elm_list_item_free(it);
efl_del(EO_OBJ(it));
}
@ -2282,11 +2280,8 @@ _item_new(Evas_Object *obj,
VIEW(it) = edje_object_add(evas_object_evas_get(obj));
edje_object_update_hints_set(VIEW(it), 1);
if (_elm_config->atspi_mode)
{
if (it->icon) efl_access_parent_set(it->icon, eo_it);
if (it->end) efl_access_parent_set(it->end, eo_it);
}
if (it->icon) efl_parent_set(it->icon, eo_it);
if (it->end) efl_parent_set(it->end, eo_it);
/* access */
if (_elm_config->access_mode == ELM_ACCESS_MODE_ON)
@ -2441,10 +2436,6 @@ _elm_list_efl_canvas_group_group_del(Eo *obj, Elm_List_Data *sd)
EINA_LIST_FREE(sd->items, eo_it)
{
ELM_LIST_ITEM_DATA_GET(eo_it, it);
/* issuing free because of "locking" item del pre hook */
_elm_list_item_free(it);
WIDGET(it) = NULL;
efl_del(eo_it);
}
@ -2706,9 +2697,6 @@ _elm_list_clear(Eo *obj, Elm_List_Data *sd)
EINA_LIST_FREE(sd->items, eo_it)
{
ELM_LIST_ITEM_DATA_GET(eo_it, it);
/* issuing free because of "locking" item del pre hook */
_elm_list_item_free(it);
efl_del(eo_it);
}

View File

@ -37,7 +37,7 @@ enum Elm.List.Mode
}
class Elm.List (Efl.Ui.Layout, Elm.Interface_Scrollable,
Efl.Access.Widget.Action, Efl.Access.Selection,
Efl.Access.Widget.Action, Efl.Access.Selection, Efl.Access,
Efl.Ui.Clickable, Efl.Ui.Selectable, Efl.Ui.Legacy)
{
[[Elementary list class]]

View File

@ -1393,10 +1393,12 @@ _elm_menu_item_efl_access_children_get(Eo *obj EINA_UNUSED, Elm_Menu_Item_Data *
return eina_list_clone(sd->submenu.items);
}
EOLIAN static Efl_Access*
_elm_menu_item_efl_access_parent_get(Eo *obj EINA_UNUSED, Elm_Menu_Item_Data *sd)
EOLIAN static Eo*
_elm_menu_item_efl_object_parent_get(Eo *obj, Elm_Menu_Item_Data *sd)
{
return sd->parent ? EO_OBJ(sd->parent) : WIDGET(sd);
if (sd->parent) return EO_OBJ(sd->parent);
if (sd->base) return WIDGET(sd);
return efl_parent_get(efl_super(obj, ELM_MENU_ITEM_CLASS));
}
EOLIAN static Efl_Access_Role

View File

@ -59,12 +59,12 @@ class Elm.Menu.Item(Elm.Widget.Item, Efl.Access.Selection,
implements {
Efl.Object.constructor;
Efl.Object.destructor;
Efl.Object.parent { get; }
Elm.Widget.Item.disable;
Elm.Widget.Item.signal_emit;
Elm.Widget.Item.part_text { get; set; }
Elm.Widget.Item.part_content { get; set; }
Efl.Access.children { get; }
Efl.Access.parent { get; }
Efl.Access.role { get; }
Efl.Access.i18n_name { get; }
Efl.Access.state_set { get; }

View File

@ -2401,9 +2401,7 @@ _item_new(Evas_Object *obj,
efl_access_type_set(VIEW(it), EFL_ACCESS_TYPE_DISABLED);
icon_obj = elm_icon_add(VIEW(it));
if (_elm_config->atspi_mode)
if (icon_obj) efl_access_parent_set(icon_obj, eo_it);
efl_parent_set(icon_obj, eo_it);
if (_elm_config->access_mode == ELM_ACCESS_MODE_ON)
_access_widget_item_register(it);

View File

@ -24,7 +24,7 @@ enum Elm.Toolbar.Shrink_Mode
}
class Elm.Toolbar (Efl.Ui.Widget, Efl.Ui.Focus.Composition, Elm.Interface_Scrollable, Efl.Ui.Direction,
Efl.Access.Widget.Action, Efl.Access.Selection,
Efl.Access.Widget.Action, Efl.Access.Selection, Efl.Access,
Efl.Ui.Clickable, Efl.Ui.Selectable, Efl.Ui.Menu, Efl.Ui.Legacy)
{
[[Elementary toolbar class]]

View File

@ -87,7 +87,7 @@ START_TEST(elm_atspi_children_parent)
elm_gengrid_item_fields_update(it, "*.", ELM_GENGRID_ITEM_FIELD_CONTENT);
ck_assert(content != NULL);
parent = efl_access_parent_get(content);
parent = efl_provider_find(efl_parent_get(content), EFL_ACCESS_MIXIN);
ck_assert(it == parent);
elm_shutdown();

View File

@ -231,6 +231,7 @@ END_TEST
START_TEST(elm_atspi_children_parent)
{
Efl_Access *parent;
Elm_Object_Item *it;
elm_init(1, NULL);
Evas_Object *win = elm_win_add(NULL, "list", ELM_WIN_BASIC);
@ -239,15 +240,15 @@ START_TEST(elm_atspi_children_parent)
Evas_Object *end = elm_icon_add(win);
Evas_Object *list = elm_list_add(win);
elm_list_item_append(list, "First Element", icon, end, NULL, NULL);
it = elm_list_item_append(list, "First Element", icon, end, NULL, NULL);
evas_object_show(list);
parent = efl_access_parent_get(icon);
ck_assert(list == parent);
parent = efl_provider_find(efl_parent_get(icon), EFL_ACCESS_MIXIN);
ck_assert(it == parent);
parent = efl_access_parent_get(end);
ck_assert(list == parent);
parent = efl_provider_find(efl_parent_get(end), EFL_ACCESS_MIXIN);
ck_assert(it == parent);
elm_shutdown();
}