_obj_mouse_in, obj);
}
+static Eina_Bool
+_keep(void *data, void *gdata)
+{
+ if (data == gdata)
+ return EINA_FALSE;
+ return EINA_TRUE;
+}
+
EOLIAN static void
_efl_ui_widget_efl_canvas_group_group_del(Eo *obj, Elm_Widget_Smart_Data *sd)
{
_callbacks_del(sd->hover_obj, obj);
sd->hover_obj = NULL;
}
-
- while (sd->subobjs)
+ while(eina_array_count(sd->children))
{
- sobj = eina_list_data_get(sd->subobjs);
+ sobj = eina_array_data_get(sd->children, 0);
- /* let the objects clean-up themselves and get rid of this list */
if (!elm_widget_sub_object_del(obj, sobj))
{
ERR("failed to remove sub object %p from %p\n", sobj, obj);
- sd->subobjs = eina_list_remove_list
- (sd->subobjs, sd->subobjs);
+ eina_array_remove(sd->children, _keep, sobj);
}
// FIXME: is that a legacy or a new object ?
evas_object_del(sobj);
+ EINA_SAFETY_ON_TRUE_RETURN(eina_array_count(sd->children) && sobj == eina_array_data_get(sd->children, 0));
}
sd->tooltips = eina_list_free(sd->tooltips); /* should be empty anyway */
sd->cursors = eina_list_free(sd->cursors); /* should be empty anyway */
//TIZEN_ONLY(20180607): Restore legacy focus
return;
/*
- Eina_List *l;
Eo *child;
_full_eval(obj, sd);
- EINA_LIST_FOREACH(sd->subobjs , l, child)
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
{
Elm_Widget_Smart_Data *sd_child;
+ child = eina_array_data_get(sd->children, i);
if (!efl_isa(child, EFL_UI_WIDGET_CLASS)) continue;
_efl_ui_widget_efl_canvas_object_is_frame_object_set(Eo *obj, Elm_Widget_Smart_Data *pd, Eina_Bool frame)
{
Evas_Object *o;
- Eina_List *li;
frame = !!frame;
efl_canvas_object_is_frame_object_set(efl_super(obj, MY_CLASS), frame);
- EINA_LIST_FOREACH(pd->subobjs, li, o)
+ for (unsigned int i = 0; i < eina_array_count(pd->children); ++i)
{
+ o = eina_array_data_get(pd->children, i);
+
if (evas_object_data_get(o, "_elm_leaveme")) continue;
efl_canvas_object_is_frame_object_set(o, frame);
}
elm_widget_access(Evas_Object *obj,
Eina_Bool is_access)
{
- const Eina_List *l;
Evas_Object *child;
Eina_Bool ret = EINA_TRUE;
API_ENTRY return EINA_FALSE;
- EINA_LIST_FOREACH(sd->subobjs, l, child)
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
{
+ child = eina_array_data_get(sd->children, i);
+
if (elm_widget_is(child))
ret &= elm_widget_access(child, is_access);
}
Eina_Bool err_generic = EINA_FALSE;
API_ENTRY return EFL_UI_THEME_APPLY_ERROR_GENERIC;
-
- EINA_LIST_FOREACH(sd->subobjs, l, child)
- if (_elm_widget_is(child))
- _elm_widget_theme_helper(elm_widget_theme(child), &err_default, &err_generic);
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
+ {
+ child = eina_array_data_get(sd->children, i);
+ if (_elm_widget_is(child))
+ _elm_widget_theme_helper(elm_widget_theme(child), &err_default, &err_generic);
+ }
if (sd->hover_obj)
_elm_widget_theme_helper(elm_widget_theme(sd->hover_obj), &err_default, &err_generic);
}
}
if (!force) return;
- EINA_LIST_FOREACH(sd->subobjs, l, child)
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
{
+ child = eina_array_data_get(sd->children, i);
if (elm_widget_is(child))
elm_widget_theme_specific(child, th, force);
}
if (parent)
{
ELM_WIDGET_DATA_GET_OR_RETURN(parent, ppd);
- EINA_SAFETY_ON_FALSE_RETURN(eina_list_data_find(ppd->subobjs, obj));
+ EINA_SAFETY_ON_FALSE_RETURN(eina_array_find(ppd->children, obj, NULL));
if (ppd->parent_obj == parent)
{
CRI("ATTEMPTING TO SET CHILD OF PARENT AS PARENT OF ITS OWN PARENT. THIS IS A BUG.");
static void
_widget_add_sub(Eo *obj, Elm_Widget_Smart_Data *sd, Evas_Object *sobj)
{
- sd->subobjs = eina_list_append(sd->subobjs, sobj);
+ if (!sd->children) sd->children = eina_array_new(1);
+ eina_array_push(sd->children, sobj);
evas_object_data_set(sobj, "elm-parent", obj);
//TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
if (efl_isa(sobj, EFL_ACCESS_OBJECT_MIXIN))
static void
_widget_del_sub(Eo *obj, Elm_Widget_Smart_Data *sd, Evas_Object *sobj)
{
- sd->subobjs = eina_list_remove(sd->subobjs, sobj);
+ eina_array_remove(sd->children, _keep, sobj);
evas_object_data_del(sobj, "elm-parent");
_callbacks_del(sobj, obj);
}
* focusable child is gone */
while (parent)
{
- const Eina_List *l;
Evas_Object *subobj;
ELM_WIDGET_DATA_GET(parent, sdp);
sdp->child_can_focus = EINA_FALSE;
- EINA_LIST_FOREACH(sdp->subobjs, l, subobj)
+ for (unsigned int i = 0; i < eina_array_count(sdp->children); ++i)
{
+ subobj = eina_array_data_get(sdp->children, i);
if ((subobj != sobj) && (_is_focusable(subobj)))
{
sdp->child_can_focus = EINA_TRUE;
Evas_Object *parent = elm_widget_parent_get(obj);
while (parent)
{
- const Eina_List *l;
Evas_Object *subobj;
ELM_WIDGET_DATA_GET(parent, sdp);
sdp->child_can_focus = EINA_FALSE;
- EINA_LIST_FOREACH(sdp->subobjs, l, subobj)
+ for (unsigned int i = 0; i < eina_array_count(sdp->children); ++i)
{
+ subobj = eina_array_data_get(sdp->children, i);
if (_is_focusable(subobj))
{
sdp->child_can_focus = EINA_TRUE;
{
/* TIZEN_ONLY(20190821): keep legacy focus logic
Efl_Ui_Widget *subs;
- Eina_List *n;
Elm_Widget_Smart_Data *pd = efl_data_scope_safe_get(obj, MY_CLASS);
EINA_SAFETY_ON_NULL_RETURN(pd);
int distance, parent_counter = (pd->parent_obj ? _tree_unfocusable_counter_get(pd->parent_obj) : 0);
distance = MAX(MIN(tree_unfocusable, 1), 0);
pd->tree_unfocusable = parent_counter + distance;
}
-
- EINA_LIST_FOREACH(pd->subobjs, n, subs)
+ for (unsigned int i = 0; i < eina_array_count(pd->children); ++i)
{
+ subs = eina_array_data_get(pd->children, i);
if (efl_isa(subs, EFL_UI_WIDGET_CLASS))
elm_widget_tree_unfocusable_set(subs, elm_widget_tree_unfocusable_get(obj));
}
elm_widget_can_focus_child_list_get(const Eo *obj)
{
Elm_Widget_Smart_Data *sd = efl_data_scope_safe_get(obj, MY_CLASS);
- const Eina_List *l;
Eina_List *child_list = NULL;
Evas_Object *child;
if (!sd) return NULL;
- EINA_LIST_FOREACH(sd->subobjs, l, child)
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
{
+ child = eina_array_data_get(sd->children, i);
if (!_elm_widget_is(child)) continue;
if ((elm_widget_can_focus_get(child)) &&
(evas_object_visible_get(child)) &&
_efl_ui_widget_focused_object_get(const Eo *obj, Elm_Widget_Smart_Data *sd)
{
const Evas_Object *subobj;
- const Eina_List *l;
if (!sd->focused || !sd->top_win_focused) return NULL;
- EINA_LIST_FOREACH(sd->subobjs, l, subobj)
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
{
+ subobj = eina_array_data_get(sd->children, i);
Evas_Object *fobj;
if (!_elm_widget_is(subobj)) continue;
fobj = efl_ui_widget_focused_object_get(subobj);
_elm_widget_top_win_focused_set(Evas_Object *obj,
Eina_Bool top_win_focused)
{
- const Eina_List *l;
Evas_Object *child;
API_ENTRY return;
if (sd->top_win_focused == top_win_focused) return;
- EINA_LIST_FOREACH(sd->subobjs, l, child)
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
{
+ child = eina_array_data_get(sd->children, i);
if (elm_widget_is(child))
_elm_widget_top_win_focused_set(child, top_win_focused);
}
_efl_ui_widget_disabled_set(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *pd, Eina_Bool disabled)
{
Efl_Ui_Widget *subs;
- Eina_List *n;
int distance, parent_counter = (pd->parent_obj ? _disabled_counter_get(pd->parent_obj) : 0);
if (disabled)
//TIZEN_ONLY(20191028): Restore focus revert in disabled_set
efl_ui_widget_focus_disabled_handle(obj);
//
- EINA_LIST_FOREACH(pd->subobjs, n, subs)
+ for (unsigned int i = 0; i < eina_array_count(pd->children); ++i)
{
+ subs = eina_array_data_get(pd->children, i);
//TIZEN_ONLY(20180607): Restore legacy focus
if (elm_widget_is(subs))
efl_ui_widget_focus_disabled_handle((Evas_Object *)subs);
else
{
Evas_Object *child;
- Eina_List *l;
- EINA_LIST_FOREACH(sd->subobjs, l, child)
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
{
+ child = eina_array_data_get(sd->children, i);
if (elm_widget_is(child) && _elm_scrollable_is(child))
{
if (elm_widget_is_legacy(child))
else
{
Evas_Object *child;
- Eina_List *l;
- EINA_LIST_FOREACH(sd->subobjs, l, child)
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
{
+ child = eina_array_data_get(sd->children, i);
if (elm_widget_is(child) && _elm_scrollable_is(child))
{
if (elm_widget_is_legacy(child))
else
{
Evas_Object *child;
- Eina_List *l;
- EINA_LIST_FOREACH(sd->subobjs, l, child)
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
{
+ child = eina_array_data_get(sd->children, i);
if (elm_widget_is(child) && _elm_scrollable_is(child))
{
if (elm_widget_is_legacy(child))
else
{
Evas_Object *child;
- Eina_List *l;
- EINA_LIST_FOREACH(sd->subobjs, l, child)
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
{
+ child = eina_array_data_get(sd->children, i);
+
if (elm_widget_is(child) && _elm_scrollable_is(child))
{
if (elm_widget_is_legacy(child))
EOLIAN static void
_efl_ui_widget_efl_ui_l10n_translation_update(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *sd)
{
- const Eina_List *l;
Evas_Object *child;
- EINA_LIST_FOREACH(sd->subobjs, l, child)
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
{
+ child = eina_array_data_get(sd->children, i);
if (elm_widget_is(child))
efl_ui_l10n_translation_update(child);
+
}
if (sd->hover_obj) efl_ui_l10n_translation_update(sd->hover_obj);
elm_widget_screen_reader(Evas_Object *obj,
Eina_Bool is_screen_reader)
{
- const Eina_List *l;
Evas_Object *child;
Eina_Bool ret = EINA_TRUE;
API_ENTRY return EINA_FALSE;
- EINA_LIST_FOREACH(sd->subobjs, l, child)
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
{
+ child = eina_array_data_get(sd->children, i);
if (elm_widget_is(child))
ret &= elm_widget_screen_reader(child, is_screen_reader);
}
EAPI Evas_Object *
elm_widget_name_find(const Eo *obj, const char *name, int recurse)
{
- Eina_List *l;
Evas_Object *child;
const char *s;
INTERNAL_ENTRY NULL;
if (!name) return NULL;
if (!_elm_widget_is(obj)) return NULL;
- EINA_LIST_FOREACH(sd->subobjs, l, child)
+
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
{
+ child = eina_array_data_get(sd->children, i);
s = evas_object_name_get(child);
if ((s) && (!strcmp(s, name))) return child;
if ((recurse != 0) &&
{
Evas_Display_Mode prev_dispmode;
Evas_Object *child;
- Eina_List *l;
API_ENTRY return;
prev_dispmode = evas_object_size_hint_display_mode_get(obj);
evas_object_size_hint_display_mode_set(obj, dispmode);
- EINA_LIST_FOREACH (sd->subobjs, l, child)
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
{
+ child = eina_array_data_get(sd->children, i);
if (elm_widget_is(child))
elm_widget_display_mode_set(child, dispmode);
}
DBG("+ %s(%p)\n",
elm_widget_type_get(obj),
obj);
- EINA_LIST_FOREACH(sd->subobjs, l, obj)
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
+ {
+ obj = eina_array_data_get(sd->children, i);
_sub_obj_tree_dump(obj, lvl + 1);
+ }
}
else
DBG("+ %s(%p)\n", evas_object_type_get(obj), obj);
Eina_List *l;
Evas_Object *o;
- EINA_LIST_FOREACH(sd->subobjs, l, o)
- _sub_obj_tree_dot_dump(o, output);
+
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
+ {
+ o = eina_array_data_get(sd->children, i);
+ _sub_obj_tree_dot_dump(o, output);
+ }
}
#endif
Evas_Object *widget;
Eo *proxy = NULL;
- EINA_LIST_FOREACH(pd->subobjs, l, widget)
+ for (unsigned int i = 0; i < eina_array_count(pd->children); ++i)
{
+ widget = eina_array_data_get(pd->children, i);
const char *type = evas_object_type_get(widget);
// TIZEN ONLY
// Ugly Tizen hack to integrate AT-SPI2 accessibility provided by WebKit/Chromium with elementary one.
elm_atspi_ewk_wrapper_a11y_init((Eo *)obj, widget);
}
}
- EINA_LIST_FOREACH(pd->subobjs, l, widget)
+ for (unsigned int i = 0; i < eina_array_count(pd->children); ++i)
{
+ widget = eina_array_data_get(pd->children, i);
+
// TIZEN_ONLY(20160705) - enable atspi_proxy to work
/* This assumes that only one proxy exists in obj */
if (!proxy)
{
Elm_Widget_Smart_Data *wd;
Evas_Object *widget;
- Eina_List *l;
wd = efl_data_scope_get(obj, EFL_UI_WIDGET_CLASS);
if (!wd) return NULL;
Eo *proxy = NULL;
- EINA_LIST_FOREACH(wd->subobjs, l, widget)
+ for (unsigned int i = 0; i < eina_array_count(wd->children); ++i)
{
+ widget = eina_array_data_get(wd->children, i);
proxy = plug_type_proxy_get(obj, widget);
if (proxy) break;
}
EOLIAN static Evas_Object*
_efl_ui_widget_newest_focus_order_get(const Eo *obj, Elm_Widget_Smart_Data *sd, unsigned int *newest_focus_order, Eina_Bool can_focus_only)
{
- const Eina_List *l;
Evas_Object *child, *cur, *best;
if (!evas_object_visible_get(obj)
best = (Evas_Object *)obj;
}
}
- EINA_LIST_FOREACH(sd->subobjs, l, child)
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
{
+ child = eina_array_data_get(sd->children, i);
if (!_elm_widget_is(child)) continue;
cur = efl_ui_widget_newest_focus_order_get
EOLIAN static void
_efl_ui_widget_focus_reconfigure(Eo *obj, Elm_Widget_Smart_Data *_pd EINA_UNUSED)
{
- const Eina_List *l;
Evas_Object *child;
API_ENTRY return;
- EINA_LIST_FOREACH(sd->subobjs, l, child)
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
{
+ child = eina_array_data_get(sd->children, i);
if (elm_widget_is(child))
efl_ui_widget_focus_reconfigure(child);
}
_efl_ui_widget_efl_canvas_object_paragraph_direction_set_internal(Eo *obj EINA_UNUSED, Efl_Ui_Widget_Data *sd, Efl_Text_Bidirectional_Type dir)
{
Evas_Object *child;
- Eina_List *l;
if (sd->on_destroy) return;
- EINA_LIST_FOREACH(sd->subobjs, l, child)
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
{
+ child = eina_array_data_get(sd->children, i);
if (_elm_widget_is(child))
{
Efl_Ui_Widget_Data *sdc = efl_data_scope_get(child, MY_CLASS);
efl_ui_widget_focused_object_clear(sd2->resize_obj);
else
{
- const Eina_List *l;
Evas_Object *child;
- EINA_LIST_FOREACH(sd2->subobjs, l, child)
+ for (unsigned int i = 0; i < eina_array_count(sd2->children); ++i)
{
+ child = eina_array_data_get(sd2->children, i);
if (!_elm_widget_is(child)) continue;
if (_is_focused(child))
{
}
else
{
- const Eina_List *l;
Evas_Object *child;
- EINA_LIST_FOREACH(sd->subobjs, l, child)
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
{
+ child = eina_array_data_get(sd->children, i);
if (!_elm_widget_is(child)) continue;
if ((_is_focusable(child)) &&
(!elm_widget_disabled_get(child)))
}
else
{
- const Eina_List *l;
Evas_Object *child;
- EINA_LIST_REVERSE_FOREACH(sd->subobjs, l, child)
+ for (unsigned int i = eina_array_count(sd->children) - 1; i >= 0; i--)
{
+ child = eina_array_data_get(sd->children, i);
if (!_elm_widget_is(child)) continue;
if ((_is_focusable(child)) &&
(!elm_widget_disabled_get(child)))
}
else
{
- const Eina_List *l;
Evas_Object *child;
- EINA_LIST_FOREACH(sd->subobjs, l, child)
+ for (unsigned int i = 0; i < eina_array_count(sd->children); ++i)
{
+ child = eina_array_data_get(sd->children, i);
if (_elm_widget_is(child) && _is_focused(child))
{
efl_ui_widget_focused_object_clear(child);