[gnome-shell-extensions] apps-menu: Clean up signal code
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell-extensions] apps-menu: Clean up signal code
- Date: Tue, 24 Mar 2015 13:21:12 +0000 (UTC)
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]