diff options
author | Marcel Hollerbach <mail@marcel-hollerbach.de> | 2019-02-27 14:01:16 -0500 |
---|---|---|
committer | Marcel Hollerbach <mail@marcel-hollerbach.de> | 2019-02-27 20:19:31 +0100 |
commit | 665f8877e93aa729a4d2eb8b532e69ad3580435b (patch) | |
tree | fe60ad52dc6273d1f3295ca1de2c91669b345241 | |
parent | 0aaae8208e458a7946376e4dcddf03e071021722 (diff) | |
download | efl-665f8877e93aa729a4d2eb8b532e69ad3580435b.tar.gz |
efl_ui_widget: child_can_focus is not needed anymore
summary_:
pd->logical.child_count is a counter where focusable children do
register themself in the parent if they can be focused or not. With this
we don't need the updating of this internal flag nor the flag itself anymore.
Depends on D8027
Reviewers: woohyun, cedric, Jaehyun_Cho, zmike, segfaultxavi
Reviewed By: segfaultxavi
Subscribers: #reviewers, #committers
Tags: #efl
Reviewed-by: Xavi Artigas <xavierartigas@yahoo.es>
Differential Revision: https://phab.enlightenment.org/D8030
-rw-r--r-- | src/lib/elementary/efl_ui_widget.c | 85 | ||||
-rw-r--r-- | src/lib/elementary/elm_widget.h | 1 |
2 files changed, 2 insertions, 84 deletions
diff --git a/src/lib/elementary/efl_ui_widget.c b/src/lib/elementary/efl_ui_widget.c index f8ead14608..57564eeea3 100644 --- a/src/lib/elementary/efl_ui_widget.c +++ b/src/lib/elementary/efl_ui_widget.c @@ -161,7 +161,7 @@ static inline Eina_Bool _is_focusable(Evas_Object *obj) { API_ENTRY return EINA_FALSE; - return sd->can_focus || (sd->child_can_focus); + return sd->can_focus || (sd->logical.child_count > 0); } static inline Eina_Bool @@ -1414,23 +1414,6 @@ _efl_ui_widget_widget_sub_object_add(Eo *obj, Elm_Widget_Smart_Data *sd, Evas_Ob efl_ui_widget_disabled_set(sobj, efl_ui_widget_disabled_get(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) - { - sdp = efl_data_scope_get(sdp->parent_obj, MY_CLASS); - - if (sdp->child_can_focus) break; - - sdp->child_can_focus = EINA_TRUE; - } - } } else { @@ -1523,35 +1506,6 @@ _efl_ui_widget_widget_sub_object_del(Eo *obj, Elm_Widget_Smart_Data *sd, Evas_Ob elm_widget_tree_unfocusable_set(sobj, EINA_TRUE); elm_widget_tree_unfocusable_set(sobj, EINA_FALSE); } - if ((sd->child_can_focus) && (_is_focusable(sobj))) - { - Evas_Object *parent = obj; - - /* update child focusable-ness on self and parents, now that a - * 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) - { - if ((subobj != sobj) && (_is_focusable(subobj))) - { - sdp->child_can_focus = EINA_TRUE; - break; - } - } - - /* break again, child_can_focus went back to - * original value */ - if (sdp->child_can_focus) break; - parent = sdp->parent_obj; - } - } if (_elm_config->atspi_mode && !sd->on_destroy) { Efl_Access_Object *aparent; @@ -1655,45 +1609,10 @@ _efl_ui_widget_focus_allow_set(Eo *obj, Elm_Widget_Smart_Data *sd, Eina_Bool can sd->can_focus = can_focus; if (sd->can_focus) { - /* update child_can_focus of parents */ - Evas_Object *o = obj; - - for (;;) - { - o = elm_widget_parent_get(o); - if (!o) break; - ELM_WIDGET_DATA_GET(o, sdp); - if (!sdp || sdp->child_can_focus) break; - sdp->child_can_focus = EINA_TRUE; - } - efl_event_callback_array_add(obj, focus_callbacks(), NULL); } else { - // update child_can_focus of parents */ - 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) - { - if (_is_focusable(subobj)) - { - sdp->child_can_focus = EINA_TRUE; - break; - } - } - /* break again, child_can_focus went back to - * original value */ - if (sdp->child_can_focus) break; - parent = sdp->parent_obj; - } efl_event_callback_array_del(obj, focus_callbacks(), NULL); } if (efl_finalized_get(obj)) @@ -1712,7 +1631,7 @@ elm_widget_child_can_focus_get(const Eo *obj) Elm_Widget_Smart_Data *sd = efl_data_scope_safe_get(obj, MY_CLASS); if (!sd) return EINA_FALSE; - return sd->child_can_focus; + return sd->logical.child_count > 0; } /** diff --git a/src/lib/elementary/elm_widget.h b/src/lib/elementary/elm_widget.h index 3763d955ba..e53c3cfef3 100644 --- a/src/lib/elementary/elm_widget.h +++ b/src/lib/elementary/elm_widget.h @@ -387,7 +387,6 @@ typedef struct _Elm_Widget_Smart_Data Eina_Bool scroll_y_locked : 1; Eina_Bool can_focus : 1; - Eina_Bool child_can_focus : 1; Eina_Bool focused : 1; Eina_Bool top_win_focused : 1; Eina_Bool tree_unfocusable : 1; |