}
EOLIAN static void
-_efl_ui_focus_composition_efl_ui_focus_object_prepare_logical(Eo *obj, Efl_Ui_Focus_Composition_Data *pd EINA_UNUSED)
+_efl_ui_focus_composition_efl_ui_focus_object_prepare_logical_none_recursive(Eo *obj, Efl_Ui_Focus_Composition_Data *pd EINA_UNUSED)
{
if (pd->dirty)
{
pd->dirty = EINA_FALSE;
}
- efl_ui_focus_object_prepare_logical(efl_super(obj, MY_CLASS));
+ efl_ui_focus_object_prepare_logical_none_recursive(efl_super(obj, MY_CLASS));
}
EOLIAN static void
}
implements {
Efl.Ui.Widget.focus_state_apply;
- Efl.Ui.Focus.Object.prepare_logical;
+ Efl.Ui.Focus.Object.prepare_logical_none_recursive;
@empty .prepare;
}
}
typedef struct {
Eina_Bool old_focus;
+ Eina_Bool ongoing_prepare_call;
} Efl_Ui_Focus_Object_Data;
EOLIAN static void
return pd->old_focus;
}
+EOLIAN static void
+_efl_ui_focus_object_prepare_logical(Eo *obj, Efl_Ui_Focus_Object_Data *pd)
+{
+ if (pd->ongoing_prepare_call) return;
+
+ pd->ongoing_prepare_call = EINA_TRUE;
+
+ efl_ui_focus_object_prepare_logical_none_recursive(obj);
+
+ pd->ongoing_prepare_call = EINA_FALSE;
+}
+
+
#include "efl_ui_focus_object.eo.c"
}
prepare_logical {
[[Tells the object that its children will be queried soon by the given manager.
+ The call will be a NOP if there is already a active preprare_logical call on this object
Deleting manager items in this call will result in undefied behaviour and may cause your system to crash.
]]
}
+ prepare_logical_none_recursive @protected {
+ [[]]
+ }
on_focus_update @protected @pure_virtual {
[[Virtual function handling focus in/out events on the widget]]
return: bool; [[$true if this widget can handle focus, $false otherwise]]
}
implements {
@empty .focus_geometry;
- @empty .prepare_logical;
+ @empty .prepare_logical_none_recursive;
@empty .focus_manager;
@empty .focus_parent;
}
}
EOLIAN static void
-_elm_gengrid_item_efl_ui_focus_object_prepare_logical(Eo *obj, Elm_Gen_Item *pd)
+_elm_gengrid_item_efl_ui_focus_object_prepare_logical_none_recursive(Eo *obj, Elm_Gen_Item *pd)
{
Eina_List *n;
Efl_Ui_Widget *wid;
_elm_widget_full_eval(wid);
}
- efl_ui_focus_object_prepare_logical(efl_super(obj, ELM_GENGRID_ITEM_CLASS));
+ efl_ui_focus_object_prepare_logical_none_recursive(efl_super(obj, ELM_GENGRID_ITEM_CLASS));
}
//TIZEN_ONLY(20171122) Fixed _accessible_set_parent for gengrid items
Elm.Widget.Item.cursor_unset;
Efl.Access.i18n_name { get; }
Efl.Access.state_set { get; }
- Efl.Ui.Focus.Object.prepare_logical;
+ Efl.Ui.Focus.Object.prepare_logical_none_recursive;
+
//TIZEN_ONLY(20171114): Region show on item elements fixed
Efl.Access.Component.highlight_grab;
Efl.Access.Component.highlight_clear;
}
EOLIAN static void
-_elm_genlist_item_efl_ui_focus_object_prepare_logical(Eo *obj, Elm_Gen_Item *pd)
+_elm_genlist_item_efl_ui_focus_object_prepare_logical_none_recursive(Eo *obj, Elm_Gen_Item *pd)
{
Eina_List *n;
Efl_Ui_Widget *wid;
_elm_widget_full_eval(wid);
}
- efl_ui_focus_object_prepare_logical(efl_super(obj, ELM_GENLIST_ITEM_CLASS));
+ efl_ui_focus_object_prepare_logical_none_recursive(efl_super(obj, ELM_GENLIST_ITEM_CLASS));
}
EOLIAN static Eina_Bool
Elm.Widget.Item.cursor_unset;
Efl.Access.i18n_name { get; }
Efl.Access.state_set { get; }
- Efl.Ui.Focus.Object.prepare_logical;
+ Efl.Ui.Focus.Object.prepare_logical_none_recursive;
+
Efl.Access.access_children { get; }
//TIZEN_ONLY(20171114) genlist: enhance accessibility scroll & highlight
Efl.Access.Component.highlight_grab;
}
EOLIAN static void
-_elm_widget_item_static_focus_efl_ui_focus_object_prepare_logical(Eo *obj, Elm_Widget_Item_Static_Focus_Data *pd EINA_UNUSED)
+_elm_widget_item_static_focus_efl_ui_focus_object_prepare_logical_none_recursive(Eo *obj, Elm_Widget_Item_Static_Focus_Data *pd EINA_UNUSED)
{
Eo *logical_child;
Elm_Widget_Item_Data *wpd = efl_data_scope_get(obj, ELM_WIDGET_ITEM_CLASS);
- efl_ui_focus_object_prepare_logical(efl_super(obj, MY_CLASS));
+ efl_ui_focus_object_prepare_logical_none_recursive(efl_super(obj, MY_CLASS));
if (!pd->realized)
{
return ret;
}
-EOLIAN static void
+EOLIAN static void
_elm_widget_item_static_focus_efl_object_destructor(Eo *obj, Elm_Widget_Item_Static_Focus_Data *pd EINA_UNUSED)
{
Elm_Widget_Item_Data *wpd = efl_data_scope_get(obj, ELM_WIDGET_ITEM_CLASS);
implements {
Efl.Object.constructor;
Efl.Object.destructor;
- Efl.Ui.Focus.Object.prepare_logical;
+ Efl.Ui.Focus.Object.prepare_logical_none_recursive;
}
}
}
EOLIAN static void
-_elm_genlist_item_efl_ui_focus_object_prepare_logical(Eo *obj, Elm_Gen_Item *pd)
+_elm_genlist_item_efl_ui_focus_object_prepare_logical_none_recursive(Eo *obj, Elm_Gen_Item *pd)
{
Eina_List *n;
Efl_Ui_Widget*wid;
_elm_widget_full_eval(wid);
}
- efl_ui_focus_object_prepare_logical(efl_super(obj, ELM_GENLIST_ITEM_CLASS));
+ efl_ui_focus_object_prepare_logical_none_recursive(efl_super(obj, ELM_GENLIST_ITEM_CLASS));
}
EOLIAN static Eina_Bool