From 08d104498c7a72f1e60e030c70f8d809465051c8 Mon Sep 17 00:00:00 2001 From: Marcel Hollerbach Date: Wed, 1 Nov 2017 15:24:36 +0100 Subject: [PATCH] efl_ui_focus_manager: improve debug informations --- src/lib/elementary/efl_ui_focus_manager.eo | 4 ++- src/lib/elementary/efl_ui_focus_manager_calc.c | 40 +++++++++++++++++++------- src/lib/elementary/elm_widget.c | 2 +- 3 files changed, 34 insertions(+), 12 deletions(-) diff --git a/src/lib/elementary/efl_ui_focus_manager.eo b/src/lib/elementary/efl_ui_focus_manager.eo index 60d7578..5dc0e25 100644 --- a/src/lib/elementary/efl_ui_focus_manager.eo +++ b/src/lib/elementary/efl_ui_focus_manager.eo @@ -11,9 +11,11 @@ struct Efl.Ui.Focus.Relations { down : list; [[[List of objects below]] next : Efl.Ui.Focus.Object; [[[Next object]] prev : Efl.Ui.Focus.Object; [[Previous object]] - type : string; [[Object type]] parent : Efl.Ui.Focus.Object; [[Parent object]] redirect : Efl.Ui.Focus.Manager; [[Redirect manager]] + node : Efl.Ui.Focus.Object; [[The node where this is the information from]] + logical : bool; [[true if this node is only logical]] + position_in_history : int; [[The position in the history stack]] } struct Efl.Ui.Focus.Manager.Logical_End_Detail { diff --git a/src/lib/elementary/efl_ui_focus_manager_calc.c b/src/lib/elementary/efl_ui_focus_manager_calc.c index 1500a3f..61c2c7c 100644 --- a/src/lib/elementary/efl_ui_focus_manager_calc.c +++ b/src/lib/elementary/efl_ui_focus_manager_calc.c @@ -1597,16 +1597,13 @@ _efl_ui_focus_manager_calc_efl_ui_focus_manager_fetch(Eo *obj, Efl_Ui_Focus_Mana res->down = DIR_CLONE(EFL_UI_FOCUS_DIRECTION_DOWN); res->next = (tmp = _next(n)) ? tmp->focusable : NULL; res->prev = (tmp = _prev(n)) ? tmp->focusable : NULL; - switch(n->type) - { - case NODE_TYPE_ONLY_LOGICAL: - res->type = "logical"; - break; - case NODE_TYPE_NORMAL: - res->type = "normal"; - break; - } - res->parent = T(n).parent->focusable; + res->position_in_history = eina_list_data_idx(pd->focus_stack, n); + res->node = child; + + res->logical = (n->type == NODE_TYPE_ONLY_LOGICAL); + + if (T(n).parent) + res->parent = T(n).parent->focusable; res->redirect = n->redirect_manager; #undef DIR_CLONE @@ -1690,5 +1687,28 @@ _efl_ui_focus_manager_calc_efl_ui_focus_manager_request_subchild(Eo *obj, Efl_Ui return NULL; } +EOLIAN static void +_efl_ui_focus_manager_calc_efl_object_dbg_info_get(Eo *obj, Efl_Ui_Focus_Manager_Calc_Data *pd, Efl_Dbg_Info *root) +{ + efl_dbg_info_get(efl_super(obj, MY_CLASS), root); + Efl_Dbg_Info *append, *group = EFL_DBG_INFO_LIST_APPEND(root, "Efl.Ui.Focus.Manager"); + Eina_Iterator *iter; + Eina_Value *list; + Node *node; + + list = eina_value_list_new(EINA_VALUE_TYPE_UINT64); + + append = EFL_DBG_INFO_LIST_APPEND(group, "children"); + + iter = eina_hash_iterator_data_new(pd->node_hash); + EINA_ITERATOR_FOREACH(iter, node) + { + EFL_DBG_INFO_APPEND(append, "-", EINA_VALUE_TYPE_UINT64, node->focusable); + } + eina_iterator_free(iter); +} + +#define EFL_UI_FOCUS_MANAGER_CALC_EXTRA_OPS \ + EFL_OBJECT_OP_FUNC(efl_dbg_info_get, _efl_ui_focus_manager_calc_efl_object_dbg_info_get) #include "efl_ui_focus_manager_calc.eo.c" diff --git a/src/lib/elementary/elm_widget.c b/src/lib/elementary/elm_widget.c index 421ccf6..26ec156 100644 --- a/src/lib/elementary/elm_widget.c +++ b/src/lib/elementary/elm_widget.c @@ -3152,7 +3152,7 @@ _elm_widget_efl_object_dbg_info_get(Eo *eo_obj, Elm_Widget_Smart_Data *_pd EINA_ { focus = EFL_DBG_INFO_LIST_APPEND(group, "Focus"); - EFL_DBG_INFO_APPEND(focus, "type", EINA_VALUE_TYPE_STRING, rel->type); + EFL_DBG_INFO_APPEND(focus, "logical", EINA_VALUE_TYPE_CHAR, rel->logical ); EFL_DBG_INFO_APPEND(focus, "manager", EINA_VALUE_TYPE_UINT64, _pd->focus.manager); EFL_DBG_INFO_APPEND(focus, "parent", EINA_VALUE_TYPE_UINT64, rel->parent); EFL_DBG_INFO_APPEND(focus, "next", EINA_VALUE_TYPE_UINT64 , rel->next); -- 2.7.4