summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Hollerbach <mail@marcel-hollerbach.de>2019-08-19 10:17:50 +0200
committerMarcel Hollerbach <mail@marcel-hollerbach.de>2019-08-20 07:42:39 +0200
commitef858e1bfabeb062dfbec4d41fcfe1fd47863267 (patch)
treed3d3c95b589ab8ba67ea018deb97359f849c0c7e
parentc1e6197b2117c1d3607fef62dd4b0d13b75839c4 (diff)
downloadefl-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.c5
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;
}