[gnome-shell/wip/exalm/gestures: 23/36] workspaceThumbnail: Sync indicator with WorkspacesDisplay
- From: Alexander Mikhaylenko <alexm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell/wip/exalm/gestures: 23/36] workspaceThumbnail: Sync indicator with WorkspacesDisplay
- Date: Tue, 12 Nov 2019 11:34:28 +0000 (UTC)
commit 5c22b41345ae314a43248a0192724ff52695613d
Author: Alexander Mikhaylenko <alexm gnome org>
Date: Mon Jul 8 13:03:20 2019 +0500
workspaceThumbnail: Sync indicator with WorkspacesDisplay
Now that both ThumbnailsBox and WorkspacesDisplay use single adjustments for
controlling indicator and scrolling, create the adjustment in OverviewControls
and pass it to both objects, effectively syncing indicator to scrolling.
https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/605
js/ui/overviewControls.js | 26 ++++++++++++++++++++++++--
js/ui/viewSelector.js | 4 ++--
js/ui/workspaceThumbnail.js | 37 +++++--------------------------------
js/ui/workspacesView.js | 19 ++-----------------
4 files changed, 33 insertions(+), 53 deletions(-)
---
diff --git a/js/ui/overviewControls.js b/js/ui/overviewControls.js
index 687dc78887..16492bdf9a 100644
--- a/js/ui/overviewControls.js
+++ b/js/ui/overviewControls.js
@@ -436,10 +436,23 @@ class ControlsManager extends St.Widget {
this._dashSpacer = new DashSpacer();
this._dashSpacer.setDashActor(this._dashSlider);
- this._thumbnailsBox = new WorkspaceThumbnail.ThumbnailsBox();
+ let workspaceManager = global.workspace_manager;
+ let activeWorkspaceIndex = workspaceManager.get_active_workspace_index();
+
+ this._workspaceAdjustment = new St.Adjustment({ value: activeWorkspaceIndex,
+ lower: 0,
+ page_increment: 1,
+ page_size: 1,
+ step_increment: 0,
+ upper: workspaceManager.n_workspaces });
+ this._updateWorkspaces();
+ workspaceManager.connect('notify::n-workspaces',
+ this._updateWorkspaces.bind(this));
+
+ this._thumbnailsBox = new WorkspaceThumbnail.ThumbnailsBox(this._workspaceAdjustment);
this._thumbnailsSlider = new ThumbnailsSlider(this._thumbnailsBox);
- this.viewSelector = new ViewSelector.ViewSelector(searchEntry,
+ this.viewSelector = new ViewSelector.ViewSelector(searchEntry, this._workspaceAdjustment,
this.dash.showAppsButton);
this.viewSelector.connect('page-changed', this._setVisibility.bind(this));
this.viewSelector.connect('page-empty', this._onPageEmpty.bind(this));
@@ -459,6 +472,15 @@ class ControlsManager extends St.Widget {
Main.overview.connect('showing', this._updateSpacerVisibility.bind(this));
}
+ _updateWorkspaces() {
+ let workspaceManager = global.workspace_manager;
+ let newNumWorkspaces = workspaceManager.n_workspaces;
+
+ this._workspaceAdjustment.upper = newNumWorkspaces;
+ this._workspaceAdjustment.value = workspaceManager.get_active_workspace_index();
+
+ }
+
_updateWorkspacesGeometry() {
let [x, y] = this.get_transformed_position();
let [width, height] = this.get_transformed_size();
diff --git a/js/ui/viewSelector.js b/js/ui/viewSelector.js
index 3be94df24d..e28b37d1e9 100644
--- a/js/ui/viewSelector.js
+++ b/js/ui/viewSelector.js
@@ -128,7 +128,7 @@ var ViewSelector = GObject.registerClass({
'page-empty': {},
},
}, class ViewSelector extends Shell.Stack {
- _init(searchEntry, showAppsButton) {
+ _init(searchEntry, workspaceAdjustment, showAppsButton) {
super._init({
name: 'viewSelector',
x_expand: true,
@@ -171,7 +171,7 @@ var ViewSelector = GObject.registerClass({
this._iconClickedId = 0;
this._capturedEventId = 0;
- this._workspacesDisplay = new WorkspacesView.WorkspacesDisplay();
+ this._workspacesDisplay = new WorkspacesView.WorkspacesDisplay(workspaceAdjustment);
this._workspacesPage = this._addPage(this._workspacesDisplay,
_("Windows"), 'focus-windows-symbolic');
diff --git a/js/ui/workspaceThumbnail.js b/js/ui/workspaceThumbnail.js
index 1ea91ac802..41be50aed2 100644
--- a/js/ui/workspaceThumbnail.js
+++ b/js/ui/workspaceThumbnail.js
@@ -7,7 +7,6 @@ const Background = imports.ui.background;
const DND = imports.ui.dnd;
const Main = imports.ui.main;
const Workspace = imports.ui.workspace;
-const WorkspacesView = imports.ui.workspacesView;
// The maximum size of a thumbnail is 1/10 the width and height of the screen
let MAX_THUMBNAIL_SCALE = 1 / 10.;
@@ -628,7 +627,7 @@ var ThumbnailsBox = GObject.registerClass({
0, Infinity, 0),
},
}, class ThumbnailsBox extends St.Widget {
- _init() {
+ _init(adjustment) {
super._init({ reactive: true,
style_class: 'workspace-thumbnails',
request_mode: Clutter.RequestMode.WIDTH_FOR_HEIGHT });
@@ -701,16 +700,12 @@ var ThumbnailsBox = GObject.registerClass({
this._syncStackingId = 0;
this._workareasChangedId = 0;
- let workspaceManager = global.workspace_manager;
- let activeWorkspaceIndex = workspaceManager.get_active_workspace_index();
- this._scrollAdjustment = new St.Adjustment({ value: activeWorkspaceIndex,
- lower: 0,
- page_increment: 1,
- page_size: 1,
- step_increment: 0,
- upper: workspaceManager.n_workspaces });
+ this._scrollAdjustment = adjustment;
this._scrollAdjustment.connect('notify::value', adj => {
+ this._animatingIndicator = (adj.value % 1) != 0;
+ if (!this._animatingIndicator)
+ this._queueUpdateStates();
this.queue_relayout();
});
}
@@ -913,9 +908,6 @@ var ThumbnailsBox = GObject.registerClass({
_createThumbnails() {
let workspaceManager = global.workspace_manager;
- this._switchWorkspaceNotifyId =
- global.window_manager.connect('switch-workspace',
- this._activeWorkspaceChanged.bind(this));
this._nWorkspacesNotifyId =
workspaceManager.connect('notify::n-workspaces',
this._workspacesChanged.bind(this));
@@ -948,10 +940,6 @@ var ThumbnailsBox = GObject.registerClass({
if (this._thumbnails.length == 0)
return;
- if (this._switchWorkspaceNotifyId > 0) {
- global.window_manager.disconnect(this._switchWorkspaceNotifyId);
- this._switchWorkspaceNotifyId = 0;
- }
if (this._nWorkspacesNotifyId > 0) {
let workspaceManager = global.workspace_manager;
workspaceManager.disconnect(this._nWorkspacesNotifyId);
@@ -980,8 +968,6 @@ var ThumbnailsBox = GObject.registerClass({
let oldNumWorkspaces = validThumbnails.length;
let newNumWorkspaces = workspaceManager.n_workspaces;
- this._scrollAdjustment.upper = newNumWorkspaces;
-
if (newNumWorkspaces > oldNumWorkspaces) {
this.addThumbnails(oldNumWorkspaces, newNumWorkspaces - oldNumWorkspaces);
} else {
@@ -1364,17 +1350,4 @@ var ThumbnailsBox = GObject.registerClass({
childBox.y2 = indicatorY2 + indicatorBottomFullBorder;
this._indicator.allocate(childBox, flags);
}
-
- _activeWorkspaceChanged(_wm, from, to, _direction) {
- this._scrollAdjustment.value = from;
- this._animatingIndicator = true;
- this._scrollAdjustment.ease(to, {
- progress_mode: Clutter.AnimationMode.EASE_OUT_QUAD,
- duration: WorkspacesView.WORKSPACE_SWITCH_TIME,
- onComplete: () => {
- this._animatingIndicator = false;
- this._queueUpdateStates();
- },
- });
- }
});
diff --git a/js/ui/workspacesView.js b/js/ui/workspacesView.js
index 3d6452c5d9..0172f7be9d 100644
--- a/js/ui/workspacesView.js
+++ b/js/ui/workspacesView.js
@@ -399,22 +399,14 @@ class ExtraWorkspaceView extends WorkspacesViewBase {
var WorkspacesDisplay = GObject.registerClass(
class WorkspacesDisplay extends St.Widget {
- _init() {
+ _init(adjustment) {
super._init({ clip_to_allocation: true });
this.connect('notify::allocation', this._updateWorkspacesActualGeometry.bind(this));
let workspaceManager = global.workspace_manager;
let activeWorkspaceIndex = workspaceManager.get_active_workspace_index();
- this._scrollAdjustment = new St.Adjustment({ value: activeWorkspaceIndex,
- lower: 0,
- page_increment: 1,
- page_size: 1,
- step_increment: 0,
- upper: workspaceManager.n_workspaces });
+ this._scrollAdjustment = adjustment;
- this._updateWorkspaces();
- workspaceManager.connect('notify::n-workspaces',
- this._updateWorkspaces.bind(this));
this._scrollAdjustment.connect('notify::value',
this._scrollValueChanged.bind(this));
@@ -510,13 +502,6 @@ class WorkspacesDisplay extends St.Widget {
}
}
- _updateWorkspaces() {
- let workspaceManager = global.workspace_manager;
- let newNumWorkspaces = workspaceManager.n_workspaces;
-
- this._scrollAdjustment.upper = newNumWorkspaces;
- }
-
_workspacesReordered() {
let workspaceManager = global.workspace_manager;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]