efl.access: remove parent property
authorMike Blumenkrantz <zmike@osg.samsung.com>
Thu, 15 Feb 2018 02:14:52 +0000 (21:14 -0500)
committerWonki Kim <wonki_.kim@samsung.com>
Thu, 5 Apr 2018 18:05:30 +0000 (03:05 +0900)
most of this is just a reimplementation of efl_provider_find

23 files changed:
src/lib/elementary/efl_access.c
src/lib/elementary/efl_access.eo
src/lib/elementary/efl_ui_widget.c
src/lib/elementary/efl_ui_widget.eo
src/lib/elementary/efl_ui_win.c
src/lib/elementary/efl_ui_win.eo
src/lib/elementary/efl_ui_win_socket.c
src/lib/elementary/efl_ui_win_socket.eo
src/lib/elementary/elm_atspi_bridge.c
src/lib/elementary/elm_atspi_proxy.c
src/lib/elementary/elm_atspi_proxy.eo
src/lib/elementary/elm_entry.c
src/lib/elementary/elm_gengrid.c
src/lib/elementary/elm_genlist.c
src/lib/elementary/elm_list.c
src/lib/elementary/elm_list.eo
src/lib/elementary/elm_menu.c
src/lib/elementary/elm_menu_item.eo
src/lib/elementary/elm_toolbar.c
src/lib/elementary/elm_toolbar.eo
src/lib/elementary_tizen/elm_genlist.c
src/tests/elementary/elm_test_gengrid.c
src/tests/elementary/elm_test_list.c

index da8acdc..a7c2ba6 100644 (file)
@@ -179,7 +179,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);
@@ -200,29 +200,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)
-{
-   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)
+EOLIAN static Efl_Object *
+_efl_access_efl_object_provider_find(const Eo *obj, Efl_Access_Data *pd EINA_UNUSED, const Efl_Object *klass)
 {
-   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*
@@ -858,7 +849,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)
      {
@@ -1024,13 +1015,13 @@ elm_atspi_accessible_gesture_cb_set(Elm_Interface_Atspi_Accessible *obj, Elm_Ats
 EAPI void
 elm_atspi_accessible_parent_set(Elm_Interface_Atspi_Accessible *obj, Elm_Interface_Atspi_Accessible *parent)
 {
-   efl_access_parent_set(obj, parent);
+   efl_parent_set(obj, parent);
 }
 
 EAPI Elm_Interface_Atspi_Accessible *
 elm_atspi_accessible_parent_get(const Elm_Interface_Atspi_Accessible *obj)
 {
-   return efl_access_parent_get(obj);
+   return efl_provider_find(efl_parent_get(obj), EFL_ACCESS_MIXIN);
 }
 
 EAPI Elm_Atspi_State_Set
index 122baf1..09e6045 100644 (file)
@@ -491,17 +491,6 @@ mixin Efl.Access (Efl.Interface, Efl.Object)
             description: string; [[Accessible contextual information]]
          }
       }
-      @property parent @beta {
-         get {
-            [[Gets object's accessible parent.]]
-         }
-         set {
-            [[Sets object's accessible parent.]]
-         }
-         values {
-            parent: Efl.Access; [[Accessible parent]]
-         }
-      }
       @property state_set @protected @beta {
          get {
             [[Gets set describing object accessible states.]]
@@ -646,6 +635,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]]
index 88892d3..56c1678 100644 (file)
@@ -975,7 +975,7 @@ _efl_ui_widget_efl_gfx_visible_set(Eo *obj, Elm_Widget_Smart_Data *pd, Eina_Bool
         if (highlighted_obj && highlighted_obj != obj)
           {
              Eo *parent;
-             parent = efl_access_parent_get(highlighted_obj);
+             parent = efl_provider_find(efl_parent_get(highlighted_obj), EFL_ACCESS_MIXIN);
              while (parent)
                {
                   if (parent == obj)
@@ -984,7 +984,7 @@ _efl_ui_widget_efl_gfx_visible_set(Eo *obj, Elm_Widget_Smart_Data *pd, Eina_Bool
                        efl_access_component_highlight_clear(highlighted_obj);
                        break;
                     }
-                  parent = efl_access_parent_get(parent);
+                  parent = efl_provider_find(efl_parent_get(parent), EFL_ACCESS_MIXIN);
                }
           }
         //
@@ -1603,7 +1603,7 @@ _efl_ui_widget_widget_sub_object_add(Eo *obj, Elm_Widget_Smart_Data *sd, Evas_Ob
         if (_elm_atspi_enabled() && !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);
           }
@@ -1695,7 +1695,7 @@ _efl_ui_widget_widget_sub_object_del(Eo *obj, Elm_Widget_Smart_Data *sd, Evas_Ob
         if (_elm_atspi_enabled() && !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);
           }
@@ -4431,13 +4431,13 @@ _elm_widget_item_highlightable(Elm_Object_Item *item)
    if (!id) return EINA_FALSE;
    if (!id->can_highlight) return EINA_FALSE;
 
-   parent = efl_access_parent_get(item);
+   parent = efl_provider_find(efl_parent_get(item), EFL_ACCESS_MIXIN);
    while (parent && !efl_isa(parent, ELM_ATSPI_APP_OBJECT_CLASS))
      {
         //TIZEN_ONLY(20160929) : atspi: Improves how to find the can_highlight of the widget
         if (!_elm_widget_can_highlight_get_by_class(parent)) return EINA_FALSE;
         //
-        parent = efl_access_parent_get(parent);
+        parent = efl_provider_find(efl_parent_get(parent), EFL_ACCESS_MIXIN);
      }
    return EINA_TRUE;
 }
@@ -6092,7 +6092,7 @@ _efl_ui_widget_efl_access_children_get(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Dat
         // TIZEN_ONLY(20160824): Do not append a child, if its accessible parent is different with widget parent
         if (efl_isa(widget, EFL_ACCESS_MIXIN))
           {
-             parent = efl_access_parent_get(widget);
+             parent = efl_provider_find(efl_parent_get(widget), EFL_ACCESS_MIXIN);
              if (parent && (parent != obj)) continue;
           }
         // TIZEN_ONLY(20160705) - enable atspi_proxy to work
@@ -6157,21 +6157,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;
-}
-
 //TIZEN_ONLY(20161107): enhance elm_atspi_accessible_can_highlight_set to set can_hihglight property to its children
 EAPI Eina_Bool
 _elm_widget_highlightable(Evas_Object *obj)
@@ -6182,13 +6167,13 @@ _elm_widget_highlightable(Evas_Object *obj)
    if (!wd) return EINA_FALSE;
    if (!wd->can_highlight) return EINA_FALSE;
 
-   parent = efl_access_parent_get(obj);
+   parent = efl_provider_find(efl_parent_get(obj), EFL_ACCESS_MIXIN);
    while (parent && !efl_isa(parent, ELM_ATSPI_APP_OBJECT_CLASS))
      {
         //TIZEN_ONLY(20160929) : atspi: Improves how to find the can_highlight of the widget
         if (!_elm_widget_can_highlight_get_by_class(parent)) return EINA_FALSE;
         //
-        parent = efl_access_parent_get(parent);
+        parent = efl_provider_find(efl_parent_get(parent), EFL_ACCESS_MIXIN);
      }
    return EINA_TRUE;
 }
@@ -6467,6 +6452,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;
 
@@ -7361,7 +7353,7 @@ _accessible_at_point_top_down_get(Eo *obj, Elm_Widget_Smart_Data *_pd EINA_UNUSE
                      {
                         // TIZEN_ONLY(20171109) : fix for invalid proxy object, when at-spi has been restarted
                         Eo *parent;
-                        parent = efl_access_parent_get(smart_parent);
+                        parent = efl_provider_find(efl_parent_get(smart_parent), EFL_ACCESS_MIXIN);
                         proxy = plug_type_proxy_get(parent, smart_parent);
                         //
                         evas_object_geometry_get(smart_parent, &px, &py, &pw, &ph);
index 35e751a..e886053 100644 (file)
@@ -619,7 +619,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; }
index 3d74e3e..ffa8143 100644 (file)
@@ -7834,15 +7834,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)
 {
@@ -7927,6 +7918,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;
 
@@ -9164,11 +9158,11 @@ static int _sort_parent_child_order(const void *data1, const void *data2)
    if (data1)
      {
         Eo *parent;
-        parent = efl_access_parent_get(data1);
+        parent = efl_provider_find(efl_parent_get(data1), EFL_ACCESS_MIXIN);
         while (parent)
           {
              if (parent == data2) return 1;
-             parent = efl_access_parent_get(parent);
+             parent = efl_provider_find(efl_parent_get(parent), EFL_ACCESS_MIXIN);
           }
      }
    return -1;
index f02b298..ff91f4e 100644 (file)
@@ -804,6 +804,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; }
@@ -820,7 +821,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; }
@@ -851,7 +851,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;
       /***********************************************************
        * TIZEN_ONLY(20180117): Override Paragraph Direction APIs *
        ***********************************************************/
index c7b4f06..88726aa 100644 (file)
@@ -121,11 +121,11 @@ _efl_ui_win_socket_efl_gfx_visible_set(Eo *obj, Efl_Ui_Win_Socket_Data *sd EINA_
 }
 
 EOLIAN static Eo*
-_efl_ui_win_socket_efl_access_parent_get(Eo *obj, Efl_Ui_Win_Socket_Data *pd)
+_efl_ui_win_socket_efl_object_parent_get(Eo *obj, Efl_Ui_Win_Socket_Data *pd)
 {
    if (pd->socket_proxy) return pd->socket_proxy;
 
-   return efl_access_parent_get(efl_super(obj, EFL_UI_WIN_SOCKET_CLASS));
+   return efl_provider_find(efl_parent_get(efl_super(obj, EFL_UI_WIN_SOCKET_CLASS)), EFL_ACCESS_MIXIN);
 }
 //
 #include "efl_ui_win_socket.eo.c"
index b6df630..aef655e 100644 (file)
@@ -29,7 +29,7 @@ class Efl.Ui.Win_Socket (Efl.Ui.Win)
       Efl.Object.finalize;
       //TIZEN_ONLY(20171108): make atspi_proxy work
       Efl.Gfx.visible { set; }
-      Efl.Access.parent { get; }
+      Efl.Object.parent { get; }
       //
    }
 }
index f79b420..fa294f8 100644 (file)
@@ -1334,7 +1334,7 @@ _accessible_reading_material_get(const Eldbus_Service_Interface *iface, const El
    eldbus_message_iter_basic_append(iter, 'i', idx);
 
    /* is selected in parent */
-   parent = efl_access_parent_get(obj);
+   parent = efl_provider_find(efl_parent_get(obj), EFL_ACCESS_MIXIN);
    if (efl_isa(parent, EFL_ACCESS_SELECTION_INTERFACE))
      {
         is_selected = efl_access_selection_is_child_selected(parent, idx);
@@ -2776,7 +2776,7 @@ _socket_embedded(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus
    const char *bus, *path;
    Eo *bridge = _elm_atspi_bridge_get();
    Eo *obj = _bridge_object_from_path(bridge, obj_path);
-   proxy = efl_access_parent_get(obj);
+   proxy = efl_provider_find(efl_parent_get(obj), EFL_ACCESS_MIXIN);
 
    if (!efl_isa(proxy, ELM_ATSPI_PROXY_CLASS))
      return eldbus_message_error_new(msg, "org.freedesktop.DBus.Error.Failed", "Unable to embed object.");
@@ -2918,7 +2918,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))
@@ -3645,7 +3645,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)))
     {
@@ -3701,7 +3701,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);
@@ -3779,7 +3779,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:
@@ -3840,7 +3840,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)
      {
@@ -4066,7 +4066,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);
@@ -4412,12 +4412,12 @@ static unsigned char _accept_object(accessibility_navigation_pointer_table *tabl
 static Eina_Bool _target_validation_check(Eo *target, Eo *root)
 {
    Eo *parent;
-   parent = efl_access_parent_get(root);
+   parent = efl_provider_find(efl_parent_get(root), EFL_ACCESS_MIXIN);
 
    while (parent)
      {
         if (parent == target) return EINA_FALSE;
-        parent = efl_access_parent_get(parent);
+        parent = efl_provider_find(efl_parent_get(parent), EFL_ACCESS_MIXIN);
      }
 
    return EINA_TRUE;
@@ -4494,14 +4494,14 @@ static Eina_List *_scrollable_parent_list_get(Eo *obj)
 
    if (obj)
      {
-        parent = efl_access_parent_get(obj);
+        parent = efl_provider_find(efl_parent_get(obj), EFL_ACCESS_MIXIN);
         while (parent)
           {
              if (efl_isa(parent, ELM_INTERFACE_SCROLLABLE_MIXIN))
                {
                   ret = eina_list_append(ret, parent);
                }
-             parent = efl_access_parent_get(parent);
+             parent = efl_provider_find(efl_parent_get(parent), EFL_ACCESS_MIXIN);
           }
      }
 
@@ -4958,7 +4958,7 @@ 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_access_parent_get(obj);
+   ret_obj = efl_provider_find(efl_parent_get(obj), EFL_ACCESS_MIXIN);
    return ret_obj;
 }
 
index d19b7f2..4510294 100644 (file)
@@ -149,7 +149,7 @@ _elm_atspi_proxy_efl_access_children_get(Eo *obj EINA_UNUSED, Elm_Atspi_Proxy_Da
 }
 
 EOLIAN Eo*
-_elm_atspi_proxy_efl_access_parent_get(Eo *obj EINA_UNUSED, Elm_Atspi_Proxy_Data *_pd)
+_elm_atspi_proxy_efl_object_parent_get(Eo *obj EINA_UNUSED, Elm_Atspi_Proxy_Data *_pd)
 {
    Eo *ret = NULL;
    if (_pd->type == ELM_ATSPI_PROXY_TYPE_PLUG)
index 37e6cce..2bec2e2 100644 (file)
@@ -42,7 +42,7 @@ class Elm.Atspi.Proxy (Efl.Ui.Widget)
    implements {
       Efl.Object.destructor;
       Efl.Access.children { get; }
-      Efl.Access.parent { get; }
+      Efl.Object.parent { get; }
       Efl.Ui.Widget.atspi;
    }
    events {
index 10a4dc7..7ed47a8 100644 (file)
@@ -7808,7 +7808,7 @@ static void
 _anchor_rect_highlighted_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
 {
    Eo *entry;
-   entry = efl_access_parent_get(obj);
+   entry = efl_provider_find(efl_parent_get(obj), EFL_ACCESS_MIXIN);
    unsigned int dindex = (unsigned int)data;
 
    Evas_Textblock_Rectangle *r;
@@ -7874,7 +7874,7 @@ _anchor_rect_unhighlighted_cb(void *data EINA_UNUSED, Evas_Object *obj,
                               void *event_info EINA_UNUSED)
 {
    Eo *entry;
-   entry = efl_access_parent_get(obj);
+   entry = efl_provider_find(efl_parent_get(obj), EFL_ACCESS_MIXIN);
 
    ELM_ENTRY_DATA_GET(entry, sd);
 
@@ -7894,7 +7894,7 @@ _anchor_rect_activated_cb(void *data EINA_UNUSED, Evas_Object *obj, void *event_
 {
    Elm_Entry_Anchor_Info ei;
    Eo *entry;
-   entry = efl_access_parent_get(obj);
+   entry = efl_provider_find(efl_parent_get(obj), EFL_ACCESS_MIXIN);
 
    ELM_ENTRY_DATA_GET(entry, sd);
 
index 38c80f1..8f5ae44 100644 (file)
@@ -4031,7 +4031,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--;
           }
@@ -4107,7 +4106,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;
           }
@@ -4147,7 +4145,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;
@@ -4385,7 +4382,7 @@ _elm_gengrid_efl_ui_widget_screen_reader(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *
              EINA_LIST_FOREACH(it->contents, l, content)
                {
                   if (efl_isa(content, EFL_ACCESS_MIXIN))
-                    efl_access_parent_set(content, EO_OBJ(it));
+                    efl_parent_set(content, EO_OBJ(it));
                }
           }
         else
@@ -6228,7 +6225,7 @@ _elm_gengrid_item_efl_access_children_get(Eo *eo_it EINA_UNUSED, Elm_Gen_Item *i
              if (part && efl_isa(part, EFL_ACCESS_MIXIN))
                {
                   ret = eina_list_append(ret, part);
-                  efl_access_parent_set(part, eo_it);
+                  efl_parent_set(part, eo_it);
                }
           }
      }
index 763337e..26c0b4d 100644 (file)
@@ -6002,7 +6002,7 @@ _elm_genlist_efl_ui_widget_screen_reader(Eo *obj EINA_UNUSED, Elm_Genlist_Data *
                          {
                             if (efl_isa(content, EFL_ACCESS_MIXIN))
                               {
-                                 efl_access_parent_set(content, EO_OBJ(it));
+                                 efl_parent_set(content, EO_OBJ(it));
                                  efl_access_children_changed_added_signal_emit(EO_OBJ(it), content);
                               }
                          }
@@ -8700,7 +8700,7 @@ _elm_genlist_item_efl_access_children_get(Eo *eo_it EINA_UNUSED, Elm_Gen_Item *i
              if (part && efl_isa(part, EFL_ACCESS_MIXIN))
                {
                   ret = eina_list_append(ret, part);
-                  efl_access_parent_set(part, eo_it);
+                  efl_parent_set(part, eo_it);
                }
           }
      }
index d424d82..1b55d57 100644 (file)
@@ -668,8 +668,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));
      }
 
@@ -2336,8 +2334,8 @@ _item_new(Evas_Object *obj,
 
    if (_elm_atspi_enabled())
      {
-        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 */
@@ -2497,10 +2495,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);
      }
 
@@ -2570,8 +2564,8 @@ _elm_list_efl_ui_widget_screen_reader(Eo *obj EINA_UNUSED, Elm_List_Data *sd, Ei
         if (is_screen_reader)
           {
              ELM_LIST_ITEM_DATA_GET(eo_it, it);
-             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);
              efl_access_added(eo_it);
              efl_access_children_changed_added_signal_emit(obj, eo_it);
           }
@@ -2792,9 +2786,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);
      }
 
index 14a83f3..cdcf704 100644 (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]]
index 94bd613..db01aef 100644 (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
index 6011399..4af98a6 100644 (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; }
index 4075691..155076f 100644 (file)
@@ -2522,7 +2522,7 @@ _item_new(Evas_Object *obj,
    icon_obj = elm_icon_add(VIEW(it));
 
    if (_elm_atspi_enabled())
-       if (icon_obj) efl_access_parent_set(icon_obj, eo_it);
+       if (icon_obj) efl_parent_set(icon_obj, eo_it);
 
    if (_elm_config->access_mode == ELM_ACCESS_MODE_ON)
      _access_widget_item_register(it);
@@ -3019,7 +3019,7 @@ _elm_toolbar_efl_ui_widget_screen_reader(Eo *obj EINA_UNUSED, Elm_Toolbar_Data *
      {
         if (is_screen_reader)
           {
-             if (it->icon) efl_access_parent_set(it->icon, EO_OBJ(it));
+             if (it->icon) efl_parent_set(it->icon, EO_OBJ(it));
              efl_access_added(EO_OBJ(it));
              efl_access_children_changed_added_signal_emit(obj, EO_OBJ(it));
           }
index 724726f..c1a1b98 100644 (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.Orientation, Efl.Ui.Legacy)
 {
    [[Elementary toolbar class]]
index 891dda7..b88d016 100644 (file)
@@ -6699,7 +6699,7 @@ _elm_genlist_efl_ui_widget_screen_reader(Eo *obj EINA_UNUSED, Elm_Genlist_Data *
                          {
                             if (efl_isa(content, EFL_ACCESS_MIXIN))
                               {
-                                 efl_access_parent_set(content, EO_OBJ(it));
+                                 efl_parent_set(content, EO_OBJ(it));
                                  efl_access_children_changed_added_signal_emit(EO_OBJ(it), content);
                               }
                          }
@@ -9234,7 +9234,7 @@ _elm_genlist_item_efl_access_children_get(Eo *eo_it EINA_UNUSED, Elm_Gen_Item *i
              if (part && efl_isa(part, EFL_ACCESS_MIXIN))
                {
                   ret = eina_list_append(ret, part);
-                  efl_access_parent_set(part, eo_it);
+                  efl_parent_set(part, eo_it);
                }
           }
      }
index 69d4b21..cec5f76 100644 (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();
index 0c5f5c4..f303ffa 100644 (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();
 }