From cb2aba8dd8af6c4a2ed93f20cea0be6e743d79d9 Mon Sep 17 00:00:00 2001 From: Gustavo Lima Chaves Date: Thu, 31 May 2012 16:23:19 +0000 Subject: [PATCH] [elm] Simplify and comment 71573's work. Let's use the smart data fetching macro whenever possible. SVN revision: 71587 --- legacy/elementary/src/lib/elm_widget.c | 68 +++++++++++++++----------- 1 file changed, 39 insertions(+), 29 deletions(-) diff --git a/legacy/elementary/src/lib/elm_widget.c b/legacy/elementary/src/lib/elm_widget.c index b04deebe79..71c6b8624f 100644 --- a/legacy/elementary/src/lib/elm_widget.c +++ b/legacy/elementary/src/lib/elm_widget.c @@ -395,26 +395,29 @@ _elm_widget_sub_object_add_func(Evas_Object *obj, { ELM_WIDGET_DATA_GET(sobj, sdc); - if (sdc) + if (sdc->parent_obj == obj) return EINA_TRUE; + if (sdc->parent_obj) { - if (sdc->parent_obj == obj) return EINA_TRUE; - if (sdc->parent_obj) + if (!elm_widget_sub_object_del(sdc->parent_obj, sobj)) + return EINA_FALSE; + } + sdc->parent_obj = obj; + _elm_widget_top_win_focused_set(sobj, sd->top_win_focused); + + /* update child focusable-ness on self and parents, now that a + * focusable child got in */ + if (!sd->child_can_focus && (_is_focusable(sobj))) + { + Elm_Widget_Smart_Data *sdp = sd; + + sdp->child_can_focus = EINA_TRUE; + while (sdp->parent_obj) { - if (!elm_widget_sub_object_del(sdc->parent_obj, sobj)) - return EINA_FALSE; - } - sdc->parent_obj = obj; - _elm_widget_top_win_focused_set(sobj, sd->top_win_focused); - if (!sd->child_can_focus && (_is_focusable(sobj))) - { - Elm_Widget_Smart_Data *sdt = evas_object_smart_data_get(obj); - sdt->child_can_focus = EINA_TRUE; - while (sdt->parent_obj) - { - sdt = evas_object_smart_data_get(sdt->parent_obj); - if (sdt->child_can_focus) break; - sdt->child_can_focus = EINA_TRUE; - } + sdp = evas_object_smart_data_get(sdp->parent_obj); + + if (sdp->child_can_focus) break; + + sdp->child_can_focus = EINA_TRUE; } } } @@ -451,7 +454,6 @@ _elm_widget_sub_object_add_func(Evas_Object *obj, return EINA_TRUE; } - static Eina_Bool _elm_widget_sub_object_del_func(Evas_Object *obj, Evas_Object *sobj) @@ -492,23 +494,31 @@ _elm_widget_sub_object_del_func(Evas_Object *obj, } if ((sd->child_can_focus) && (_is_focusable(sobj))) { - Evas_Object *subobj; - const Eina_List *l; - Elm_Widget_Smart_Data *sdt = evas_object_smart_data_get(obj); - while (1) + Evas_Object *parent = obj; + + /* update child focusable-ness on self and parents, now that a + * focusable child is gone */ + while (parent) { - sdt->child_can_focus = EINA_FALSE; - EINA_LIST_FOREACH(sdt->subobjs, l, subobj) + 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) { if ((subobj != sobj) && (_is_focusable(subobj))) { - sdt->child_can_focus = EINA_TRUE; + sdp->child_can_focus = EINA_TRUE; break; } } - if (sdt->child_can_focus) break; - if (!sdt->parent_obj) break; - sdt = evas_object_smart_data_get(sdt->parent_obj); + + /* break again, child_can_focus went back to + * original value */ + if (sdp->child_can_focus) break; + parent = sdp->parent_obj; } }