[gnome-shell] keyboard: Unset current page when it gets destroyed



commit c0c2edf2e1162bb36ad93ab015a64b7dedbd7cec
Author: Marco Trevisan (TreviƱo) <mail 3v1n0 net>
Date:   Thu May 9 14:30:21 2019 -0500

    keyboard: Unset current page when it gets destroyed
    
    The current page is going to be destroyed as part of _onKeyboardGroupsChanged
    cleanup, however we don't unset its pointer, and thus we'd might try to call a
    function using an invalidated pointer.
    
    So, unset the this._current_page reference when its get destroyed, connecting
    to destroy signal when setting it and disconnecting when changing page.
    
    Fixes https://gitlab.gnome.org/GNOME/gnome-shell/issues/1281
    
    https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/540

 js/ui/keyboard.js | 5 +++++
 1 file changed, 5 insertions(+)
---
diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js
index fbba2840e..a67d08f1e 100644
--- a/js/ui/keyboard.js
+++ b/js/ui/keyboard.js
@@ -1522,10 +1522,15 @@ var Keyboard = class Keyboard {
 
         if (this._current_page != null) {
             this._setCurrentLevelLatched(this._current_page, false);
+            this._current_page.disconnect(this._current_page._destroyID);
             this._current_page.hide();
+            delete this._current_page._destroyID;
         }
 
         this._current_page = layers[activeLevel];
+        this._current_page._destroyID = this._current_page.connect('destroy', () => {
+            this._current_page = null;
+        });
         this._updateCurrentPageVisible();
     }
 


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