Eina_List *lnode;
parent = T(node).parent;
+
+ //we are accessing the parents children, prepare!
+ efl_ui_focus_object_prepare_logical(parent->focusable);
+
lnode = eina_list_data_find_list(T(parent).children, node);
lnode = eina_list_prev(lnode);
{
Node *n;
+ //prepare the node itself so if there are probebly no children, then they are here.
+ efl_ui_focus_object_prepare_logical(node->focusable);
+
//Case 1 we are having children
//But only enter the children if it does NOT have a redirect manager
if (T(node).children && !node->redirect_manager)
Eina_List *lnode;
parent = T(n).parent;
+
+ //we are accessing the parents children, prepare!
+ efl_ui_focus_object_prepare_logical(parent->focusable);
+
lnode = eina_list_data_find_list(T(parent).children, n);
lnode = eina_list_next(lnode);
return NULL;
n =_prev_item(node);
+
+ //we are accessing prev items children, prepare them!
+ if (n && n->focusable)
+ efl_ui_focus_object_prepare_logical(n->focusable);
+
//case 1 there is a item in the parent previous to node, which has children
if (n && T(n).children)
{
F_DBG(" %p is logical, fetching the next subnode that is either a redirect or a regular", obj);
//important! if there are no children _next would return the parent of node which will exceed the limit of children of node
+ efl_ui_focus_object_prepare_logical(node->focusable);
if (node->tree.children)
{
target = node;
while (target && target->type == NODE_TYPE_ONLY_LOGICAL && !target->redirect_manager)
{
target = _next(target);
-
//abort if we are exceeding the childrens of node
if (target == node) target = NULL;
}
dirty_flush(obj, pd, n);
+ //make sure to prepare_logical so next and prev are correctly
+ if (n->tree.parent)
+ efl_ui_focus_object_prepare_logical(n->tree.parent->focusable);
+
#define DIR_CLONE(dir) _convert(DIRECTION_ACCESS(n,dir).partners);
res->right = DIR_CLONE(EFL_UI_FOCUS_DIRECTION_RIGHT);
focus : bool; [[The state in which the object should be put]]
}
}
+ prepare_logical {
+ [[Tells the object that the children of it will be queried soon by the given manager.
+
+ Deleting items in the manager in this call will result in undefied behaviour and may crash. Dont do that!
+ ]]
+ }
}
implements {
@empty .focus_geometry;
+ @empty .prepare_logical;
}
events {
focus,changed : bool; [[Emitted if the focus state has changed]]