[gnome-shell] IMStatusChooserItem: clean up signal handlers on destroy()



commit 615723d8df61ea261f278441904c7ba97fd9baff
Author: Giovanni Campagna <gcampagna src gnome org>
Date:   Mon Oct 17 15:18:25 2011 +0200

    IMStatusChooserItem: clean up signal handlers on destroy()
    
    Extensions (like alternative-status-menu) expect that calling
    destroy() on a menu item will not leave signal handlers around.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=660520

 js/ui/userMenu.js |   15 +++++++++++++++
 1 files changed, 15 insertions(+), 0 deletions(-)
---
diff --git a/js/ui/userMenu.js b/js/ui/userMenu.js
index 311ba73..d2b0ea3 100644
--- a/js/ui/userMenu.js
+++ b/js/ui/userMenu.js
@@ -199,6 +199,21 @@ IMStatusChooserItem.prototype = {
         }));
     },
 
+    destroy: function() {
+        // clean up signal handlers
+        if (this._userLoadedId != 0) {
+            this._user.disconnect(this._userLoadedId);
+            this._userLoadedId = 0;
+        }
+
+        if (this._userChangedId != 0) {
+            this._user.disconnect(this._userChangedId);
+            this._userChangedId = 0;
+        }
+
+        PopupMenu.PopupBaseMenuItem.prototype.destroy.call(this);
+    },
+
     // Override getColumnWidths()/setColumnWidths() to make the item
     // independent from the overall column layout of the menu
     getColumnWidths: function() {



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