zmike pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=6312054181e15bfc45f02c0979cec893b91fd9d4
commit 6312054181e15bfc45f02c0979cec893b91fd9d4 Author: Marcel Hollerbach <[email protected]> Date: Tue Apr 14 11:29:25 2020 -0400 efl_ui_focus_layer: correctly dismantle redirect chain Summary: when a redirect manager is unset, all focus managers in the chain upper to the set manager must be unset. The code uses redirect manager == NULL as an check for the manager to be active or not. ref D11667 Depends on D11671 Reviewers: zmike Reviewed By: zmike Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D11672 --- src/lib/elementary/efl_ui_focus_layer.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/lib/elementary/efl_ui_focus_layer.c b/src/lib/elementary/efl_ui_focus_layer.c index ccbe1d31e8..a183c7e8a3 100644 --- a/src/lib/elementary/efl_ui_focus_layer.c +++ b/src/lib/elementary/efl_ui_focus_layer.c @@ -147,7 +147,17 @@ _efl_ui_focus_layer_enable_set(Eo *obj, Efl_Ui_Focus_Layer_Data *pd, Eina_Bool v pd->old_focus = NULL; if (fallback && efl_ui_focus_manager_redirect_get(pd->registered_manager) == obj) - efl_ui_focus_manager_redirect_set(pd->registered_manager, NULL); + { + Efl_Ui_Focus_Manager *m = pd->registered_manager; + + while (efl_ui_focus_manager_redirect_get(m)) + { + Efl_Ui_Focus_Manager *old = m; + + m = efl_ui_focus_manager_redirect_get(m); + efl_ui_focus_manager_redirect_set(old, NULL); + } + } efl_ui_focus_manager_calc_unregister(pd->registered_manager, obj); pd->registered_manager = NULL; --
