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);
 }
 
 /**

-- 


Reply via email to