diff options
author | Marcel Hollerbach <mail@marcel-hollerbach.de> | 2019-08-19 10:17:50 +0200 |
---|---|---|
committer | Marcel Hollerbach <mail@marcel-hollerbach.de> | 2019-08-20 07:42:39 +0200 |
commit | ef858e1bfabeb062dfbec4d41fcfe1fd47863267 (patch) | |
tree | d3d3c95b589ab8ba67ea018deb97359f849c0c7e | |
parent | c1e6197b2117c1d3607fef62dd4b0d13b75839c4 (diff) | |
download | efl-ef858e1bfabeb062dfbec4d41fcfe1fd47863267.tar.gz |
efl_ui_focus_manager_calc: safe if this is root in a flag
otherwise we would need to get the private data of the focus manager
which is quite a heavy operation. This is slowing down enormously the
visibility setting of widgets.
Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Differential Revision: https://phab.enlightenment.org/D9617
-rw-r--r-- | src/lib/elementary/efl_ui_focus_manager_calc.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/lib/elementary/efl_ui_focus_manager_calc.c b/src/lib/elementary/efl_ui_focus_manager_calc.c index aaa41fc90d..e355c30f97 100644 --- a/src/lib/elementary/efl_ui_focus_manager_calc.c +++ b/src/lib/elementary/efl_ui_focus_manager_calc.c @@ -69,6 +69,7 @@ struct _Node{ Eina_Bool on_list : 1; Eina_Bool unused : 1; + Eina_Bool this_is_root : 1; }; #define T(n) (n->tree) @@ -886,14 +887,13 @@ static void _free_node(void *data) { Node *node = data; - FOCUS_DATA(node->manager); if (node->type == NODE_TYPE_ONLY_LOGICAL) efl_event_callback_array_del(node->focusable, logical_node(), node->manager); else efl_event_callback_array_del(node->focusable, regular_node(), node->manager); - if (pd->root != data) + if (!node->this_is_root) { node_item_free(node); } @@ -1746,6 +1746,7 @@ _efl_ui_focus_manager_calc_efl_ui_focus_manager_root_set(Eo *obj EINA_UNUSED, Ef node = _register(obj, pd, root, NULL, NODE_TYPE_ONLY_LOGICAL, NULL); pd->root = node; + pd->root->this_is_root = 1; return EINA_TRUE; } |