[gnome-shell] workspaceThumbnail: make ThumbnailsBox track workspace changes itself
- From: Cosimo Cecchi <cosimoc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] workspaceThumbnail: make ThumbnailsBox track workspace changes itself
- Date: Mon, 17 Dec 2012 12:25:45 +0000 (UTC)
commit 2f7c0b19856dc583dea33afe458c83e0b676c8c4
Author: Tanner Doshier <doshitan gmail com>
Date: Tue Jul 24 10:45:07 2012 -0500
workspaceThumbnail: make ThumbnailsBox track workspace changes itself
Instead of having WorkspacesDisplay calling us.
https://bugzilla.gnome.org/show_bug.cgi?id=690175
js/ui/workspaceThumbnail.js | 46 +++++++++++++++++++++++++++++++++++++++++++
js/ui/workspacesView.js | 16 ---------------
2 files changed, 46 insertions(+), 16 deletions(-)
---
diff --git a/js/ui/workspaceThumbnail.js b/js/ui/workspaceThumbnail.js
index c6b5bdb..d543f2b 100644
--- a/js/ui/workspaceThumbnail.js
+++ b/js/ui/workspaceThumbnail.js
@@ -1,6 +1,7 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Clutter = imports.gi.Clutter;
+const Gio = imports.gi.Gio;
const Lang = imports.lang;
const Mainloop = imports.mainloop;
const Meta = imports.gi.Meta;
@@ -27,6 +28,8 @@ const WORKSPACE_CUT_SIZE = 10;
const WORKSPACE_KEEP_ALIVE_TIME = 100;
+const OVERRIDE_SCHEMA = 'org.gnome.shell.overrides';
+
const WindowClone = new Lang.Class({
Name: 'WindowClone',
@@ -554,6 +557,16 @@ const ThumbnailsBox = new Lang.Class({
Lang.bind(this, this._onDragEnd));
Main.overview.connect('window-drag-cancelled',
Lang.bind(this, this._onDragCancelled));
+
+ this._settings = new Gio.Settings({ schema: OVERRIDE_SCHEMA });
+ this._settings.connect('changed::dynamic-workspaces',
+ Lang.bind(this, this._updateSwitcherVisibility));
+ },
+
+ _updateSwitcherVisibility: function() {
+ this.actor.visible =
+ this._settings.get_boolean('dynamic-workspaces') ||
+ global.screen.n_workspaces > 1;
},
_onButtonRelease: function(actor, event) {
@@ -723,6 +736,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;
@@ -744,6 +760,8 @@ const ThumbnailsBox = new Lang.Class({
};
this.addThumbnails(0, global.screen.n_workspaces);
+
+ this._updateSwitcherVisibility();
},
hide: function() {
@@ -751,12 +769,40 @@ 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);
+ }
+
+ this._updateSwitcherVisibility();
+ },
+
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 89eee30..bd11076 100644
--- a/js/ui/workspacesView.js
+++ b/js/ui/workspacesView.js
@@ -547,10 +547,6 @@ const WorkspacesDisplay = new Lang.Class({
this._notifyOpacityId = 0;
this._swipeScrollBeginId = 0;
this._swipeScrollEndId = 0;
-
- this._settings = new Gio.Settings({ schema: OVERRIDE_SCHEMA });
- this._settings.connect('changed::dynamic-workspaces',
- Lang.bind(this, this._updateSwitcherVisibility));
},
_onPan: function(action) {
@@ -560,12 +556,6 @@ const WorkspacesDisplay = new Lang.Class({
return false;
},
- _updateSwitcherVisibility: function() {
- this._thumbnailsBox.actor.visible =
- this._settings.get_boolean('dynamic-workspaces') ||
- global.screen.n_workspaces > 1;
- },
-
show: function() {
if(!this._alwaysZoomOut) {
let [mouseX, mouseY] = global.get_pointer();
@@ -586,7 +576,6 @@ const WorkspacesDisplay = new Lang.Class({
this._controls.show();
this._thumbnailsBox.show();
- this._updateSwitcherVisibility();
this._updateWorkspacesViews();
@@ -935,8 +924,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)
@@ -959,14 +946,11 @@ const WorkspacesDisplay = new Lang.Class({
lostWorkspaces[l].destroy();
}
}
-
- this._thumbnailsBox.removeThumbnails(removedIndex, removedNum);
}
for (let i = 0; i < this._workspacesViews.length; i++)
this._workspacesViews[i].updateWorkspaces(oldNumWorkspaces,
newNumWorkspaces);
- this._updateSwitcherVisibility();
},
_updateZoom : function() {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]