[gnome-shell/gnome-42] signalTracker: Don't try to create a new SignalTracker for disconnecting



commit 75fcb6a84db13723db8d8de4ec3998ef279ff9e7
Author: Sebastian Keller <skeller gnome org>
Date:   Mon Aug 29 04:19:28 2022 +0200

    signalTracker: Don't try to create a new SignalTracker for disconnecting
    
    After the next commit, when some classes, such as PopupMenuManager try
    to disconnect via a destroy handler, the SignalTracker might have
    already been destroyed, so trying to get it from the SignalManager will
    cause it to create a new one, which will then try to connect to the
    destroy signal of the already destroyed object.
    
    This could for example be triggered by changing backgrounds.
    
    Fix this by not doing anything in disconnectObject if there is no
    SignalTracker for that object.
    
    Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2466>
    (cherry picked from commit 54ee728aa088f12cfb67e006cf75d9bbe5964b7a)

 js/misc/signalTracker.js | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)
---
diff --git a/js/misc/signalTracker.js b/js/misc/signalTracker.js
index 0a7bbdb6c3..df56f02365 100644
--- a/js/misc/signalTracker.js
+++ b/js/misc/signalTracker.js
@@ -57,6 +57,14 @@ class SignalManager {
         }
         return signalTracker;
     }
+
+    /**
+     * @param {Object} obj - object to get signal tracker for
+     * @returns {?SignalTracker} - the signal tracker for object if it exists
+     */
+    maybeGetSignalTracker(obj) {
+        return this._signalTrackers.get(obj) ?? null;
+    }
 }
 
 class SignalTracker {
@@ -225,7 +233,7 @@ function connectObject(thisObj, ...args) {
  * @returns {void}
  */
 function disconnectObject(thisObj, obj) {
-    SignalManager.getDefault().getSignalTracker(thisObj).untrack(obj);
+    SignalManager.getDefault().maybeGetSignalTracker(thisObj)?.untrack(obj);
 }
 
 /**


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