bu5hm4n pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=d481dd58ec772b29060bddffd3280264a2cf89cc
commit d481dd58ec772b29060bddffd3280264a2cf89cc Author: Marcel Hollerbach <[email protected]> Date: Wed Dec 21 11:41:55 2016 +0100 efl_ui_frame: migrate to new focus system when collapsed the subtree is unfocusable --- src/lib/elementary/efl_ui_frame.c | 3 +++ src/lib/elementary/elm_widget.c | 22 ++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/src/lib/elementary/efl_ui_frame.c b/src/lib/elementary/efl_ui_frame.c index 6c453d4..e0568f5 100644 --- a/src/lib/elementary/efl_ui_frame.c +++ b/src/lib/elementary/efl_ui_frame.c @@ -135,6 +135,7 @@ _on_frame_clicked(void *data, elm_layout_signal_emit(data, "elm,action,toggle", "elm"); sd->collapsed++; sd->anim = EINA_TRUE; + elm_widget_tree_unfocusable_set(data, sd->collapsed); } efl_event_callback_legacy_call (data, EFL_UI_EVENT_CLICKED, NULL); @@ -234,6 +235,7 @@ _efl_ui_frame_collapse_set(Eo *obj, Efl_Ui_Frame_Data *sd, Eina_Bool collapse) sd->collapsed = !!collapse; sd->anim = EINA_FALSE; + elm_widget_tree_unfocusable_set(obj, sd->collapsed); _sizing_eval(obj, sd); } @@ -249,6 +251,7 @@ _efl_ui_frame_collapse_go(Eo *obj, Efl_Ui_Frame_Data *sd, Eina_Bool collapse) efl_event_callback_legacy_call (wd->resize_obj, EDJE_OBJECT_EVENT_RECALC, obj); sd->collapsed = collapse; + elm_widget_tree_unfocusable_set(obj, sd->collapsed); sd->anim = EINA_TRUE; } diff --git a/src/lib/elementary/elm_widget.c b/src/lib/elementary/elm_widget.c index 33df392..6745de3 100644 --- a/src/lib/elementary/elm_widget.c +++ b/src/lib/elementary/elm_widget.c @@ -1702,6 +1702,25 @@ _elm_widget_child_can_focus_get(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *sd) return sd->child_can_focus; } +static void +_full_eval_children(Eo *obj, Elm_Widget_Smart_Data *sd) +{ + Eina_List *l; + Eo *child; + + _full_eval(obj, sd); + + EINA_LIST_FOREACH(sd->subobjs , l, child) + { + Elm_Widget_Smart_Data *sd_child; + + if (!efl_isa(child, ELM_WIDGET_CLASS)) continue; + + sd_child = efl_data_scope_get(child, ELM_WIDGET_CLASS); + _full_eval_children(child, sd_child); + } +} + /** * @internal * @@ -1724,6 +1743,9 @@ _elm_widget_tree_unfocusable_set(Eo *obj, Elm_Widget_Smart_Data *sd, Eina_Bool t if (sd->tree_unfocusable == tree_unfocusable) return; sd->tree_unfocusable = tree_unfocusable; elm_widget_focus_tree_unfocusable_handle(obj); + + //focus state eval on all children + _full_eval_children(obj, sd); } /** --
