[gnome-shell/wip/exalm/gestures: 4/16] workspaceThumbnail: Sync indicator with WorkspacesDisplay
- From: Alexander Mikhaylenko <alexm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell/wip/exalm/gestures: 4/16] workspaceThumbnail: Sync indicator with WorkspacesDisplay
- Date: Wed, 16 Oct 2019 07:35:06 +0000 (UTC)
commit 65e270f8dea6cd8d0c0be00180c79716b5309007
Author: Alexander Mikhaylenko <exalm7659 gmail com>
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 | 24 ++++++++++++++++++++++--
js/ui/viewSelector.js | 4 ++--
js/ui/workspaceThumbnail.js | 37 +++++--------------------------------
js/ui/workspacesView.js | 19 ++-----------------
4 files changed, 31 insertions(+), 53 deletions(-)
---
diff --git a/js/ui/overviewControls.js b/js/ui/overviewControls.js
index 0edf8cd5d1..9437c5ad22 100644
--- a/js/ui/overviewControls.js
+++ b/js/ui/overviewControls.js
@@ -423,10 +423,23 @@ var ControlsManager = class {
this._dashSpacer = new DashSpacer();
this._dashSpacer.setDashActor(this._dashSlider.actor);
- 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));
@@ -451,6 +464,13 @@ var ControlsManager = class {
Main.overview.connect('showing', this._updateSpacerVisibility.bind(this));
}
+ _updateWorkspaces() {
+ let workspaceManager = global.workspace_manager;
+ let newNumWorkspaces = workspaceManager.n_workspaces;
+
+ this._workspaceAdjustment.upper = newNumWorkspaces;
+ }
+
_updateWorkspacesGeometry() {
let [x, y] = this.actor.get_transformed_position();
let [width, height] = this.actor.get_transformed_size();
diff --git a/js/ui/viewSelector.js b/js/ui/viewSelector.js
index 4e82c4968b..ab2f6a3ab8 100644
--- a/js/ui/viewSelector.js
+++ b/js/ui/viewSelector.js
@@ -124,7 +124,7 @@ var ShowOverviewAction = GObject.registerClass({
});
var ViewSelector = class {
- constructor(searchEntry, showAppsButton) {
+ constructor(searchEntry, workspaceAdjustment, showAppsButton) {
this.actor = new Shell.Stack({ name: 'viewSelector' });
this._showAppsButton = showAppsButton;
@@ -164,7 +164,7 @@ var ViewSelector = class {
this._iconClickedId = 0;
this._capturedEventId = 0;
- this._workspacesDisplay = new WorkspacesView.WorkspacesDisplay();
+ this._workspacesDisplay = new WorkspacesView.WorkspacesDisplay(workspaceAdjustment);
this._workspacesPage = this._addPage(this._workspacesDisplay.actor,
_("Windows"), 'focus-windows-symbolic');
diff --git a/js/ui/workspaceThumbnail.js b/js/ui/workspaceThumbnail.js
index 4055d75adc..cb03284fc1 100644
--- a/js/ui/workspaceThumbnail.js
+++ b/js/ui/workspaceThumbnail.js
@@ -8,7 +8,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.;
@@ -630,7 +629,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 });
@@ -707,16 +706,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();
});
}
@@ -919,9 +914,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));
@@ -954,10 +946,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);
@@ -986,8 +974,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 {
@@ -1369,17 +1355,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 dd20134b70..4323b82858 100644
--- a/js/ui/workspacesView.js
+++ b/js/ui/workspacesView.js
@@ -409,7 +409,7 @@ class DelegateFocusNavigator extends St.Widget {
});
var WorkspacesDisplay = class {
- constructor() {
+ constructor(adjustment) {
this.actor = new DelegateFocusNavigator({ clip_to_allocation: true });
this.actor._delegate = this;
this.actor.connect('notify::allocation', this._updateWorkspacesActualGeometry.bind(this));
@@ -417,16 +417,8 @@ var WorkspacesDisplay = class {
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));
@@ -529,13 +521,6 @@ var WorkspacesDisplay = class {
}
}
- _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]