raster pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=324e74427c5a3f18e1a7108ebc69ce62133a34e9

commit 324e74427c5a3f18e1a7108ebc69ce62133a34e9
Author: Carsten Haitzler <ras...@rasterman.com>
Date:   Wed Aug 11 15:35:44 2021 +0100

    elm focus stuff - just handle corner cases during tree deletes quietly
    
    like if parent is null in the process of a tree deletion etc....
---
 src/lib/elementary/efl_ui_focus_composition.c        |  2 ++
 src/lib/elementary/efl_ui_focus_manager_calc.c       |  2 +-
 src/lib/elementary/efl_ui_focus_manager_root_focus.c |  1 +
 src/lib/elementary/efl_ui_widget.c                   | 16 ++++++++--------
 4 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/src/lib/elementary/efl_ui_focus_composition.c 
b/src/lib/elementary/efl_ui_focus_composition.c
index de38094c62..b3cec4f501 100644
--- a/src/lib/elementary/efl_ui_focus_composition.c
+++ b/src/lib/elementary/efl_ui_focus_composition.c
@@ -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)
diff --git a/src/lib/elementary/efl_ui_focus_manager_calc.c 
b/src/lib/elementary/efl_ui_focus_manager_calc.c
index 5b7589d95f..ec8f1a1adb 100644
--- a/src/lib/elementary/efl_ui_focus_manager_calc.c
+++ b/src/lib/elementary/efl_ui_focus_manager_calc.c
@@ -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);
diff --git a/src/lib/elementary/efl_ui_focus_manager_root_focus.c 
b/src/lib/elementary/efl_ui_focus_manager_root_focus.c
index 29507001fb..70c0aee2c3 100644
--- a/src/lib/elementary/efl_ui_focus_manager_root_focus.c
+++ b/src/lib/elementary/efl_ui_focus_manager_root_focus.c
@@ -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)
diff --git a/src/lib/elementary/efl_ui_widget.c 
b/src/lib/elementary/efl_ui_widget.c
index 26c4887684..8ad78e28c2 100644
--- a/src/lib/elementary/efl_ui_widget.c
+++ b/src/lib/elementary/efl_ui_widget.c
@@ -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)

-- 


Reply via email to