[gnome-shell/gnome-3-36] main: Unset the right prevFocus actor after the focus stack got shifted



commit d64b1e6efbedbb27b04e955af890ef12496d28cd
Author: Jonas Dreßler <verdre v0yd nl>
Date:   Tue Apr 28 21:26:11 2020 +0000

    main: Unset the right prevFocus actor after the focus stack got shifted
    
    When a modal that's not on top of the modalActorFocusStack gets popped,
    we shift the focus stack as described in popModal() to ensure the chain
    remains correct. That however destroys the association of a modal actor
    and its prevFocus actor on the focus stack, because the prevFocus actors
    are now moved to different entries of the stack.
    
    Now when a prevFocus actor gets destroyed, we don't handle that case
    correctly and search for the modal actor that was associated with the
    prevFocus actor before the stack was shifted, which means we end up
    unsetting the wrong prevFocus actor.
    
    So fix that and search the stack for the prevFocus actor which is being
    destroyed instead to unset the correct entry.
    
    Thanks to Florian Müllner for figuring out the actual issue and
    proposing this fix.
    
    Fixes https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2446
    
    
    (cherry picked from commit d3880c0bffa4cbc047ea5c9b1e7b33ac2ff5cdf9)

 js/ui/main.js | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
---
diff --git a/js/ui/main.js b/js/ui/main.js
index bb579c3474..9de420491a 100644
--- a/js/ui/main.js
+++ b/js/ui/main.js
@@ -521,7 +521,9 @@ function pushModal(actor, params) {
     let prevFocusDestroyId;
     if (prevFocus != null) {
         prevFocusDestroyId = prevFocus.connect('destroy', () => {
-            let index = _findModal(actor);
+            const index = modalActorFocusStack.findIndex(
+                record => record.prevFocus === prevFocus);
+
             if (index >= 0)
                 modalActorFocusStack[index].prevFocus = null;
         });


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]