diff --git a/js/ui/workspaceThumbnail.js b/js/ui/workspaceThumbnail.js index 0369c3825..97464e7a7 100644 --- a/js/ui/workspaceThumbnail.js +++ b/js/ui/workspaceThumbnail.js @@ -148,6 +148,8 @@ WorkspaceThumbnail.prototype = { this.metaWorkspace = metaWorkspace; this.monitorIndex = Main.layoutManager.primaryIndex; + this._removed = false; + this.actor = new St.Group({ reactive: true, clip_to_allocation: true, style_class: 'workspace-thumbnail' }); @@ -278,7 +280,7 @@ WorkspaceThumbnail.prototype = { }, _doAddWindow : function(metaWin) { - if (this.leavingOverview) + if (this._removed) return; let win = metaWin.get_compositor_private(); @@ -288,7 +290,7 @@ WorkspaceThumbnail.prototype = { // the compositor finds out about them... Mainloop.idle_add(Lang.bind(this, function () { - if (this.actor && + if (!this._removed && metaWin.get_compositor_private() && metaWin.get_workspace() == this.metaWorkspace) this._doAddWindow(metaWin); @@ -344,7 +346,12 @@ WorkspaceThumbnail.prototype = { this.actor.destroy(); }, - _onDestroy: function(actor) { + workspaceRemoved : function() { + if (this._removed) + return; + + this._removed = true; + this.metaWorkspace.disconnect(this._windowAddedId); this.metaWorkspace.disconnect(this._windowRemovedId); global.screen.disconnect(this._windowEnteredMonitorId); @@ -357,6 +364,10 @@ WorkspaceThumbnail.prototype = { delete metaWin._minimizedChangedId; } } + }, + + _onDestroy: function(actor) { + this.workspaceRemoved(); this._windows = []; this.actor = null; @@ -584,6 +595,8 @@ ThumbnailsBox.prototype = { if (thumbnail.state > ThumbnailState.NORMAL) continue; + thumbnail.workspaceRemoved(); + if (currentPos >= start && currentPos < start + count) this._setThumbnailState(thumbnail, ThumbnailState.REMOVING);