Fix JSObject leak in workspace.js

https://bugzilla.gnome.org/show_bug.cgi?id=612318
This commit is contained in:
Maxim Ermilov 2010-03-18 01:23:32 +03:00
parent 9a2d883cf5
commit 46bce04788
2 changed files with 15 additions and 2 deletions

View File

@ -37,6 +37,10 @@ _Draggable.prototype = {
if (!manualMode)
this.actor.connect('button-press-event',
Lang.bind(this, this._onButtonPress));
this.actor.connect('destroy', Lang.bind(this, function() {
this.disconnectAll();
}));
this._onEventId = null;
this._buttonDown = false; // The mouse button has been pressed and has not yet been released.

View File

@ -199,8 +199,12 @@ WindowClone.prototype = {
},
_onDestroy: function() {
this.metaWindow._delegate = null;
this.actor._delegate = null;
if (this._zoomLightbox)
this._zoomLightbox.destroy();
this.disconnectAll();
},
_onEnter: function (actor, event) {
@ -1370,7 +1374,7 @@ Workspace.prototype = {
Mainloop.source_remove(this._repositionWindowsId);
this._repositionWindowsId = 0;
}
Main.overview.connect('hidden', Lang.bind(this,
this._overviewHiddenId = Main.overview.connect('hidden', Lang.bind(this,
this._doneLeavingOverview));
// Position and scale the windows.
@ -1479,6 +1483,10 @@ Workspace.prototype = {
},
_onDestroy: function(actor) {
if (this._overviewHiddenId) {
Main.overview.disconnect(this._overviewHiddenId);
this._overviewHiddenId = 0;
}
Tweener.removeTweens(actor);
this._metaWorkspace.disconnect(this._windowAddedId);
@ -1493,6 +1501,7 @@ Workspace.prototype = {
// the desktop window, which is never reparented
for (let w = 1; w < this._windows.length; w++)
this._windows[w].destroy();
this._windows = [];
},
// Sets this.leavingOverview flag to false.