bu5hm4n pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=9669ca9ab93220641d87a7aa63503890c6425e7a
commit 9669ca9ab93220641d87a7aa63503890c6425e7a Author: Marcel Hollerbach <mar...@osg.samsung.com> Date: Tue May 1 13:24:13 2018 +0200 efl_ui_focus_manager_calc: prepare the tree when we attempt to move --- src/lib/elementary/efl_ui_focus_manager_calc.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/lib/elementary/efl_ui_focus_manager_calc.c b/src/lib/elementary/efl_ui_focus_manager_calc.c index a80b45fd07..c546512abf 100644 --- a/src/lib/elementary/efl_ui_focus_manager_calc.c +++ b/src/lib/elementary/efl_ui_focus_manager_calc.c @@ -83,6 +83,7 @@ typedef struct { static Node* _request_subchild(Node *node); static void dirty_add(Eo *obj, Efl_Ui_Focus_Manager_Calc_Data *pd, Node *dirty); static Node* _next(Node *node); +static void _prepare_node(Node *root); static void _manager_in_chain_set(Eo *obj, Efl_Ui_Focus_Manager_Calc_Data *pd) @@ -1232,7 +1233,7 @@ _get_middle(Evas_Object *obj, Eina_Vector2 *elem) } static Node* -_coords_movement(Efl_Ui_Focus_Manager_Calc_Data *pd, Node *upper, Efl_Ui_Focus_Direction direction) +_coords_movement(Eo *obj, Efl_Ui_Focus_Manager_Calc_Data *pd, Node *upper, Efl_Ui_Focus_Direction direction) { Node *candidate; Eina_List *node_list; @@ -1240,6 +1241,10 @@ _coords_movement(Efl_Ui_Focus_Manager_Calc_Data *pd, Node *upper, Efl_Ui_Focus_D EINA_SAFETY_ON_FALSE_RETURN_VAL(DIRECTION_IS_2D(direction), NULL); + //flush the node and prepare all the nodes + _prepare_node(pd->root); + dirty_flush(obj, pd, upper); + //decide which direction we take lst = DIRECTION_ACCESS(upper, direction).partners; if (!lst) @@ -1425,7 +1430,7 @@ _logical_movement(Efl_Ui_Focus_Manager_Calc_Data *pd EINA_UNUSED, Node *upper, E } static Efl_Ui_Focus_Object* -_request_move(Eo *obj EINA_UNUSED, Efl_Ui_Focus_Manager_Calc_Data *pd, Efl_Ui_Focus_Direction direction, Node *upper, Eina_Bool accept_logical) +_request_move(Eo *obj, Efl_Ui_Focus_Manager_Calc_Data *pd, Efl_Ui_Focus_Direction direction, Node *upper, Eina_Bool accept_logical) { Node *dir = NULL; @@ -1441,13 +1446,11 @@ _request_move(Eo *obj EINA_UNUSED, Efl_Ui_Focus_Manager_Calc_Data *pd, Efl_Ui_Fo } - dirty_flush(obj, pd, upper); - if (direction == EFL_UI_FOCUS_DIRECTION_PREVIOUS || direction == EFL_UI_FOCUS_DIRECTION_NEXT) dir = _logical_movement(pd, upper, direction, accept_logical); else - dir = _coords_movement(pd, upper, direction); + dir = _coords_movement(obj, pd, upper, direction); //return the widget if (dir) --