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);
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*
if (val == pd->type)
return;
- parent = efl_access_parent_get(obj);
+ parent = efl_provider_find(efl_parent_get(obj), EFL_ACCESS_MIXIN);
switch (val)
{
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
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.]]
}
implements {
Efl.Object.destructor;
+ Efl.Object.provider_find;
}
events {
property,changed: string; [[Called when property has changed]]
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)
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);
}
}
//
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);
}
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);
}
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;
}
// 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
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)
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;
}
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;
{
// 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);
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; }
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)
{
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;
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;
class.constructor;
Efl.Object.constructor;
Efl.Object.destructor;
+ Efl.Object.provider_find;
Efl.Object.finalize;
Efl.Object.debug_name_override;
Efl.Gfx.visible { set; }
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; }
Efl.Content.content { get; set; }
Efl.Content.content_unset;
Efl.Part.part;
- Efl.Object.provider_find;
/***********************************************************
* TIZEN_ONLY(20180117): Override Paragraph Direction APIs *
***********************************************************/
}
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"
Efl.Object.finalize;
//TIZEN_ONLY(20171108): make atspi_proxy work
Efl.Gfx.visible { set; }
- Efl.Access.parent { get; }
+ Efl.Object.parent { get; }
//
}
}
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);
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.");
}
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))
/* 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)))
{
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);
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:
Eo *collection = obj;
if (limit)
- collection = efl_access_parent_get(obj);
+ collection = efl_provider_find(efl_parent_get(obj), EFL_ACCESS_MIXIN);
switch (tree)
{
_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);
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;
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);
}
}
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;
}
}
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)
implements {
Efl.Object.destructor;
Efl.Access.children { get; }
- Efl.Access.parent { get; }
+ Efl.Object.parent { get; }
Efl.Ui.Widget.atspi;
}
events {
_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;
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);
{
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);
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--;
}
{
if ((!it->walking) && (it->generation < sd->generation))
{
- it->del_cb(it);
efl_del(eo_it);
sd->last_selected_item = NULL;
}
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;
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
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);
}
}
}
{
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);
}
}
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);
}
}
}
{
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));
}
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 */
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);
}
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);
}
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);
}
}
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]]
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
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; }
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);
{
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));
}
}
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]]
{
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);
}
}
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);
}
}
}
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();
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);
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();
}