elm focus stuff - just handle corner cases during tree deletes quietly

like if parent is null in the process of a tree deletion etc....
This commit is contained in:
Carsten Haitzler 2021-08-11 15:35:44 +01:00
parent bace9d9ee7
commit 324e74427c
4 changed files with 12 additions and 9 deletions

View File

@ -161,6 +161,8 @@ _efl_ui_focus_composition_efl_ui_widget_focus_state_apply(Eo *obj, Efl_Ui_Focus_
configured_state->parent == current_state.parent)
return !!current_state.manager;
if (!redirect) return EINA_FALSE;
registered = efl_ui_widget_focus_state_apply(efl_super(obj, MY_CLASS), current_state, configured_state, redirect);
if (registered)

View File

@ -645,7 +645,7 @@ _efl_ui_focus_manager_calc_update_parent(Eo *obj EINA_UNUSED, Efl_Ui_Focus_Manag
Node *node;
Node *parent;
EINA_SAFETY_ON_NULL_RETURN_VAL(parent_obj, EINA_FALSE);
if (!parent_obj) return EINA_FALSE;
EINA_SAFETY_ON_NULL_RETURN_VAL(child, EINA_FALSE);
node = node_get(obj, pd, child);

View File

@ -95,6 +95,7 @@ _efl_ui_focus_manager_root_focus_efl_ui_focus_manager_calc_register(Eo *obj, Efl
EOLIAN static Eina_Bool
_efl_ui_focus_manager_root_focus_efl_ui_focus_manager_calc_register_logical(Eo *obj, Efl_Ui_Focus_Manager_Root_Focus_Data *pd, Efl_Ui_Focus_Object *child, Efl_Ui_Focus_Object *parent, Efl_Ui_Focus_Manager *redirect)
{
if (!parent) return EINA_FALSE;
if (efl_ui_focus_manager_calc_register_logical(efl_super(obj, MY_CLASS), child, parent, redirect))
{
if (redirect && pd->rect_registered)

View File

@ -441,16 +441,16 @@ _logical_parent_eval(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *pd, Eina_Bool s
if (should)
{
provider = efl_provider_find(obj, EFL_UI_FOCUS_PARENT_PROVIDER_INTERFACE);
EINA_SAFETY_ON_NULL_RETURN_VAL(provider, NULL);
parent = efl_ui_focus_parent_provider_find_logical_parent(provider, obj);
if (provider)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(provider, NULL);
parent = efl_ui_focus_parent_provider_find_logical_parent(provider, obj);
}
else parent = NULL;
}
else
parent = NULL;
}
else
{
parent = efl_ui_widget_parent_get(obj);
else parent = NULL;
}
else parent = efl_ui_widget_parent_get(obj);
if (pd->logical.parent != parent)