summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>2021-08-11 15:35:44 +0100
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>2021-08-11 15:35:44 +0100
commit324e74427c5a3f18e1a7108ebc69ce62133a34e9 (patch)
tree3e2e49cb6d88b626d203c77df4d145ecacc27fd9 /src
parentbace9d9ee7ec4fbdff01213ed71ae23205f4e22a (diff)
downloadefl-324e74427c5a3f18e1a7108ebc69ce62133a34e9.tar.gz
elm focus stuff - just handle corner cases during tree deletes quietly
like if parent is null in the process of a tree deletion etc....
Diffstat (limited to 'src')
-rw-r--r--src/lib/elementary/efl_ui_focus_composition.c2
-rw-r--r--src/lib/elementary/efl_ui_focus_manager_calc.c2
-rw-r--r--src/lib/elementary/efl_ui_focus_manager_root_focus.c1
-rw-r--r--src/lib/elementary/efl_ui_widget.c16
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)