bu5hm4n pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=f32359baba4ccc3d46643cd58a353ba160a3253d

commit f32359baba4ccc3d46643cd58a353ba160a3253d
Author: Marcel Hollerbach <[email protected]>
Date:   Sun Oct 15 17:44:18 2017 +0200

    elm_toolbar: port to composition
---
 src/lib/elementary/elm_toolbar.c        | 101 ++++++++++++--------------------
 src/lib/elementary/elm_toolbar.eo       |   4 +-
 src/lib/elementary/elm_widget_toolbar.h |   1 -
 3 files changed, 38 insertions(+), 68 deletions(-)

diff --git a/src/lib/elementary/elm_toolbar.c b/src/lib/elementary/elm_toolbar.c
index 97d5074a2d..e9d9a1c123 100644
--- a/src/lib/elementary/elm_toolbar.c
+++ b/src/lib/elementary/elm_toolbar.c
@@ -2,6 +2,7 @@
 # include "elementary_config.h"
 #endif
 
+#define EFL_UI_FOCUS_COMPOSITION_PROTECTED
 #define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED
 #define EFL_ACCESS_SELECTION_PROTECTED
 #define ELM_INTERFACE_ATSPI_WIDGET_ACTION_PROTECTED
@@ -64,62 +65,6 @@ static const Elm_Action key_actions[] = {
 
 static void _item_select(Elm_Toolbar_Item_Data *it);
 
-static void
-_item_focus_eval(Elm_Toolbar_Item_Data *pd)
-{
-   Eina_Bool want = EINA_TRUE;
-   Efl_Ui_Focus_Object *widget;
-   Efl_Ui_Focus_Manager *manager;
-
-   if (elm_wdg_item_disabled_get(pd->base->eo_obj))
-     want = EINA_FALSE;
-
-   if (!evas_object_visible_get(VIEW(pd)))
-     want = EINA_FALSE;
-
-   if (pd->separator)
-     want = EINA_FALSE;
-
-   if (!!pd->registered == !!want) return;
-
-   //grab manager from widget
-   widget = WIDGET(pd);
-   manager = widget;
-
-   if (want)
-     {
-        efl_ui_focus_manager_calc_register(manager, EO_OBJ(pd), widget, NULL);
-        pd->registered = manager;
-     }
-   else
-     {
-        efl_ui_focus_manager_calc_unregister(manager, EO_OBJ(pd));
-        pd->registered = NULL;
-     }
-
-}
-
-static void
-_item_focus_eval_all(Elm_Toolbar *obj, Elm_Toolbar_Data *pd)
-{
-   Elm_Toolbar_Item_Data *it;
-   Eina_List *order = NULL;
-
-   EINA_INLIST_FOREACH(pd->items, it)
-     {
-        _item_focus_eval(it);
-        order = eina_list_append(order, EO_OBJ(it));
-     }
-
-   if (pd->more_item)
-     {
-        _item_focus_eval(pd->more_item);
-        order = eina_list_append(order, EO_OBJ(pd->more_item));
-     }
-
-   efl_ui_focus_manager_calc_update_order(obj, obj, order);
-}
-
 static int
 _toolbar_item_prio_compare_cb(const void *i1,
                               const void *i2)
@@ -949,7 +894,7 @@ EOLIAN static void
 _elm_toolbar_item_elm_widget_item_disabled_set(Eo *eo_id, 
Elm_Toolbar_Item_Data *sd, Eina_Bool disabled)
 {
    elm_wdg_item_disabled_set(efl_super(eo_id, ELM_TOOLBAR_ITEM_CLASS), 
disabled);
-   _item_focus_eval(sd);
+   efl_ui_focus_composition_dirty(WIDGET(sd));
 }
 
 EOLIAN static void
@@ -2359,12 +2304,7 @@ _elm_toolbar_item_efl_object_destructor(Eo *eo_item, 
Elm_Toolbar_Item_Data *item
                  item->selected && next) _item_select(next);
           }
      }
-
-   if (item->registered)
-     {
-        efl_ui_focus_manager_calc_unregister(item->registered, eo_item);
-        item->registered = NULL;
-     }
+   efl_ui_focus_composition_dirty(WIDGET(item));
 
    _item_del(item);
 
@@ -4109,10 +4049,41 @@ elm_toolbar_icon_order_lookup_get(const Evas_Object 
*obj EINA_UNUSED)
    return ELM_ICON_LOOKUP_FDO_THEME;
 }
 
+static Eina_Bool
+_part_of_chain(Elm_Toolbar_Item_Data *pd)
+{
+   Eina_Bool want = EINA_TRUE;
+   if (elm_wdg_item_disabled_get(pd->base->eo_obj))
+     want = EINA_FALSE;
+
+   if (!evas_object_visible_get(VIEW(pd)))
+     want = EINA_FALSE;
+
+   if (pd->separator)
+     want = EINA_FALSE;
+
+   return want;
+}
+
 EOLIAN static void
-_elm_toolbar_efl_ui_focus_object_prepare_logical(Eo *obj, Elm_Toolbar_Data *pd)
+_elm_toolbar_efl_ui_focus_composition_prepare(Eo *obj, Elm_Toolbar_Data *pd)
 {
-   _item_focus_eval_all(obj, pd);
+   Elm_Toolbar_Item_Data *it;
+   Eina_List *order = NULL;
+
+   EINA_INLIST_FOREACH(pd->items, it)
+     {
+       if (_part_of_chain(it))
+          order = eina_list_append(order, EO_OBJ(it));
+     }
+
+   if (pd->more_item)
+     {
+        if (_part_of_chain(pd->more_item))
+          order = eina_list_append(order, EO_OBJ(pd->more_item));
+     }
+
+   efl_ui_focus_composition_elements_set(obj, order);
 }
 
 
diff --git a/src/lib/elementary/elm_toolbar.eo 
b/src/lib/elementary/elm_toolbar.eo
index 1ba5e8b36b..c194043b1e 100644
--- a/src/lib/elementary/elm_toolbar.eo
+++ b/src/lib/elementary/elm_toolbar.eo
@@ -23,7 +23,7 @@ enum Elm.Toolbar.Shrink_Mode
    last [[Indicates error if returned by elm_toolbar_shrink_mode_get()]]
 }
 
-class Elm.Toolbar (Elm.Widget, Elm.Interface_Scrollable, Efl.Ui.Direction,
+class Elm.Toolbar (Elm.Widget, Efl.Ui.Focus.Composition, 
Elm.Interface_Scrollable, Efl.Ui.Direction,
                    Elm.Interface.Atspi_Widget_Action, Efl.Access.Selection,
                    Efl.Ui.Clickable, Efl.Ui.Selectable, Efl.Ui.Menu)
 {
@@ -344,7 +344,7 @@ class Elm.Toolbar (Elm.Widget, Elm.Interface_Scrollable, 
Efl.Ui.Direction,
       Efl.Ui.Menu.first_item { get; }
       Efl.Ui.Menu.last_item { get; }
       Efl.Ui.Menu.items { get; }
-      Efl.Ui.Focus.Object.prepare_logical;
+      Efl.Ui.Focus.Composition.prepare;
    }
    events {
       item,focused; [[Called when toolbar item got focus]]
diff --git a/src/lib/elementary/elm_widget_toolbar.h 
b/src/lib/elementary/elm_widget_toolbar.h
index 61c110144f..095f1f0876 100644
--- a/src/lib/elementary/elm_widget_toolbar.h
+++ b/src/lib/elementary/elm_widget_toolbar.h
@@ -83,7 +83,6 @@ struct _Elm_Toolbar_Item_Data
    Eina_List    *states;
    Eina_List    *current_state;
 
-   Efl_Ui_Focus_Manager *registered;
    Eina_Bool     separator : 1;
    Eina_Bool     selected : 1;
    Eina_Bool     menu : 1;

-- 


Reply via email to