From f4814d200bd39cb8b33c66b2345897d4be1a7477 Mon Sep 17 00:00:00 2001 From: Tanner Doshier Date: Tue, 24 Jul 2012 10:45:07 -0500 Subject: [PATCH] workspaceThumbnail: Make ThumbnailsBox track workspace changes itself https://bugzilla.gnome.org/show_bug.cgi?id=682050 --- js/ui/workspaceThumbnail.js | 29 +++++++++++++++++++++++++++++ js/ui/workspacesView.js | 4 ---- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/js/ui/workspaceThumbnail.js b/js/ui/workspaceThumbnail.js index 67aef73f5..8487208dd 100644 --- a/js/ui/workspaceThumbnail.js +++ b/js/ui/workspaceThumbnail.js @@ -723,6 +723,9 @@ const ThumbnailsBox = new Lang.Class({ this._switchWorkspaceNotifyId = global.window_manager.connect('switch-workspace', Lang.bind(this, this._activeWorkspaceChanged)); + this._nWorkspacesNotifyId = + global.screen.connect('notify::n-workspaces', + Lang.bind(this, this._workspacesChanged)); this._targetScale = 0; this._scale = 0; @@ -751,12 +754,38 @@ const ThumbnailsBox = new Lang.Class({ global.window_manager.disconnect(this._switchWorkspaceNotifyId); this._switchWorkspaceNotifyId = 0; } + if (this._nWorkspacesNotifyId > 0) { + global.screen.disconnect(this._nWorkspacesNotifyId); + this._nWorkspacesNotifyId = 0; + } for (let w = 0; w < this._thumbnails.length; w++) this._thumbnails[w].destroy(); this._thumbnails = []; }, + _workspacesChanged: function() { + let oldNumWorkspaces = this._thumbnails.length; + let newNumWorkspaces = global.screen.n_workspaces; + let active = global.screen.get_active_workspace_index(); + + if (newNumWorkspaces > oldNumWorkspaces) { + this.addThumbnails(oldNumWorkspaces, newNumWorkspaces - oldNumWorkspaces); + } else { + let removedIndex; + let removedNum = oldNumWorkspaces - newNumWorkspaces; + for (let w = 0; w < oldNumWorkspaces; w++) { + let metaWorkspace = global.screen.get_workspace_by_index(w); + if (this._thumbnails[w].metaWorkspace != metaWorkspace) { + removedIndex = w; + break; + } + } + + this.removeThumbnails(removedIndex, removedNum); + } + }, + addThumbnails: function(start, count) { for (let k = start; k < start + count; k++) { let metaWorkspace = global.screen.get_workspace_by_index(k); diff --git a/js/ui/workspacesView.js b/js/ui/workspacesView.js index 217cdec3b..79f0ff7dd 100644 --- a/js/ui/workspacesView.js +++ b/js/ui/workspacesView.js @@ -934,8 +934,6 @@ const WorkspacesDisplay = new Lang.Class({ } m++; } - - this._thumbnailsBox.addThumbnails(oldNumWorkspaces, newNumWorkspaces - oldNumWorkspaces); } else { // Assume workspaces are only removed sequentially // (e.g. 2,3,4 - not 2,4,7) @@ -958,8 +956,6 @@ const WorkspacesDisplay = new Lang.Class({ lostWorkspaces[l].destroy(); } } - - this._thumbnailsBox.removeThumbnails(removedIndex, removedNum); } for (let i = 0; i < this._workspacesViews.length; i++)