[gnome-shell] appMenu: Clean up on destroy



commit 07daa95393b2ad482b59d5c498b3f82964bbb64b
Author: Florian Müllner <fmuellner gnome org>
Date:   Thu Aug 12 00:24:02 2021 +0200

    appMenu: Clean up on destroy
    
    For now the menu is only used in the top bar, where we can assume
    that it exists "forever". This won't be the case when we start
    reusing it elsewhere, so make sure we clean up after ourselves.
    
    Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1948>

 js/ui/appMenu.js | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)
---
diff --git a/js/ui/appMenu.js b/js/ui/appMenu.js
index ae6aa16a0f..42c92a4222 100644
--- a/js/ui/appMenu.js
+++ b/js/ui/appMenu.js
@@ -55,8 +55,12 @@ var AppMenu = class AppMenu extends PopupMenu.PopupMenu {
 
         this.addAction(_('Quit'), () => this._app.request_quit());
 
-        this._appSystem.connect('installed-changed',
-            () => this._updateDetailsVisibility());
+        this._signals = [];
+        this._signals.push([
+            this._appSystem,
+            this._appSystem.connect('installed-changed',
+                () => this._updateDetailsVisibility()),
+        ]);
         this._updateDetailsVisibility();
     }
 
@@ -65,6 +69,17 @@ var AppMenu = class AppMenu extends PopupMenu.PopupMenu {
         this._detailsItem.visible = sw !== null;
     }
 
+    /** */
+    destroy() {
+        super.destroy();
+
+        for (const [obj, id] of this._signals)
+            obj.disconnect(id);
+        this._signals = [];
+
+        this.setApp(null);
+    }
+
     /**
      * @returns {bool} - true if the menu is empty
      */


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