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;

-- 


Reply via email to