From 74ed3646ada2c70c40721ee54caa42c31e937ec7 Mon Sep 17 00:00:00 2001 From: "Owen W. Taylor" Date: Tue, 17 Jan 2012 17:50:31 -0500 Subject: [PATCH] workspaceThumbnail: fix window tracking bugs - We should only call workspaceRemoved() for workspaces that are are actually being removed. - When we have multiple monitors, a window on a secondary monitor is on all workspaces, so it ends up in all workspaces _allWindows lists, so we can't use previous presence in that list to determine whether we need to go ahead and add the actor; allWindows is simply the list of windows where we are listening to notify::minimized. https://bugzilla.gnome.org/show_bug.cgi?id=667652 --- js/ui/workspaceThumbnail.js | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/js/ui/workspaceThumbnail.js b/js/ui/workspaceThumbnail.js index 0ae04dcd5..8735a7873 100644 --- a/js/ui/workspaceThumbnail.js +++ b/js/ui/workspaceThumbnail.js @@ -297,17 +297,19 @@ WorkspaceThumbnail.prototype = { return; } + if (this._allWindows.indexOf(metaWin) == -1) { + let minimizedChangedId = metaWin.connect('notify::minimized', + Lang.bind(this, + this._updateMinimized)); + this._allWindows.push(metaWin); + this._minimizedChangedIds.push(minimizedChangedId); + } + // We might have the window in our list already if it was on all workspaces and // now was moved to this workspace - if (this._allWindows.indexOf(metaWin) != -1) + if (this._lookupIndex (metaWin) != -1) return; - let minimizedChangedId = metaWin.connect('notify::minimized', - Lang.bind(this, - this._updateMinimized)); - this._allWindows.push(metaWin); - this._minimizedChangedIds.push(minimizedChangedId); - if (!this._isMyWindow(win) || !this._isOverviewWindow(win)) return; @@ -601,10 +603,10 @@ ThumbnailsBox.prototype = { if (thumbnail.state > ThumbnailState.NORMAL) continue; - thumbnail.workspaceRemoved(); - - if (currentPos >= start && currentPos < start + count) + if (currentPos >= start && currentPos < start + count) { + thumbnail.workspaceRemoved(); this._setThumbnailState(thumbnail, ThumbnailState.REMOVING); + } currentPos++; }