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
This commit is contained in:
Marcel Hollerbach 2020-04-14 11:29:25 -04:00 committed by Mike Blumenkrantz
parent 2ed854bb92
commit 6312054181
1 changed files with 11 additions and 1 deletions

View File

@ -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;