[gnome-shell-extensions] apps-menu: Clean up signal code



commit 487c089e862f5b6dc0d232cbad1837df85f73f9d
Author: Florian Müllner <fmuellner gnome org>
Date:   Mon Mar 23 23:48:56 2015 +0100

    apps-menu: Clean up signal code
    
    Setting up signal handlers inside a class and rely on outside code
    to disconnect them via global variables is utterly weird. Just
    disconnect everything inside the class when the corresponding actor
    is destroyed.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=746639

 extensions/apps-menu/extension.js |   24 ++++++++++++------------
 1 files changed, 12 insertions(+), 12 deletions(-)
---
diff --git a/extensions/apps-menu/extension.js b/extensions/apps-menu/extension.js
index ed91aab..232ebcc 100644
--- a/extensions/apps-menu/extension.js
+++ b/extensions/apps-menu/extension.js
@@ -287,18 +287,19 @@ const ApplicationsButton = new Lang.Class({
         this.actor.label_actor = this._label;
 
         this.actor.connect('captured-event', Lang.bind(this, this._onCapturedEvent));
+        this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
 
-        _showingId = Main.overview.connect('showing', Lang.bind(this, function() {
+        this._showingId = Main.overview.connect('showing', Lang.bind(this, function() {
             this.actor.add_accessible_state (Atk.StateType.CHECKED);
         }));
-        _hidingId = Main.overview.connect('hiding', Lang.bind(this, function() {
+        this._hidingId = Main.overview.connect('hiding', Lang.bind(this, function() {
             this.actor.remove_accessible_state (Atk.StateType.CHECKED);
         }));
 
         this.reloadFlag = false;
         this._createLayout();
         this._display();
-        _installedChangedId = appSys.connect('installed-changed', Lang.bind(this, function() {
+        this._installedChangedId = appSys.connect('installed-changed', Lang.bind(this, function() {
             if (this.menu.isOpen) {
                 this._redisplay();
                 this.mainBox.show();
@@ -310,7 +311,7 @@ const ApplicationsButton = new Lang.Class({
         // Since the hot corner uses stage coordinates, Clutter won't
         // queue relayouts for us when the panel moves. Queue a relayout
         // when that happens.
-        _panelBoxChangedId = Main.layoutManager.connect('panel-box-changed', Lang.bind(this, function() {
+        this._panelBoxChangedId = Main.layoutManager.connect('panel-box-changed', Lang.bind(this, function() 
{
             container.queue_relayout();
         }));
     },
@@ -326,6 +327,13 @@ const ApplicationsButton = new Lang.Class({
         return separator;
     },
 
+    _onDestroy: function() {
+        Main.overview.disconnect(this._showingId);
+        Main.overview.disconnect(this._hidingId);
+        Main.layoutManager.disconnect(this._panelBoxChangedId);
+        appSys.disconnect(this._installedChangedId);
+    },
+
     _onCapturedEvent: function(actor, event) {
         if (event.type() == Clutter.EventType.BUTTON_PRESS) {
             if (!Main.overview.shouldToggleByCornerOrButton())
@@ -573,10 +581,6 @@ const ApplicationsButton = new Lang.Class({
 
 let appsMenuButton;
 let activitiesButton;
-let _hidingId;
-let _installedChangedId;
-let _panelBoxChangedId;
-let _showingId;
 
 function enable() {
     activitiesButton = Main.panel.statusArea['activities'];
@@ -594,10 +598,6 @@ function enable() {
 
 function disable() {
     Main.panel.menuManager.removeMenu(appsMenuButton.menu);
-    appSys.disconnect(_installedChangedId);
-    Main.layoutManager.disconnect(_panelBoxChangedId);
-    Main.overview.disconnect(_hidingId);
-    Main.overview.disconnect(_showingId);
     appsMenuButton.destroy();
     activitiesButton.container.show();
 


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