forked from enlightenment/efl
efl_ui_focus_layer: correctly dismantle redirect chain
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
This commit is contained in:
parent
dcd88ab233
commit
cdd9bb7fb5
|
@ -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;
|
pd->old_focus = NULL;
|
||||||
|
|
||||||
if (fallback && efl_ui_focus_manager_redirect_get(pd->registered_manager) == obj)
|
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);
|
efl_ui_focus_manager_calc_unregister(pd->registered_manager, obj);
|
||||||
pd->registered_manager = NULL;
|
pd->registered_manager = NULL;
|
||||||
|
|
Loading…
Reference in New Issue