From f497e863fd5d117af70ad9f45a46c5e48c0f3e7e Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Thu, 10 Aug 2023 16:59:00 -0300 Subject: [PATCH] workspaceAnimation: Sync progress with main adjustment Create a derived workspaces adjustment using the new API, and bind it to the 'progress' property. This is only done by the MonitorGroup representing the primary monitor. The progress value that WorkspaceAnimation operates on represents the percentage within the workspaceIndices array we are, so make sure to transform the percentage to the correct workspace index. Part-of: --- js/ui/workspaceAnimation.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/js/ui/workspaceAnimation.js b/js/ui/workspaceAnimation.js index 93be07e2c..5a4fe3ba3 100644 --- a/js/ui/workspaceAnimation.js +++ b/js/ui/workspaceAnimation.js @@ -9,6 +9,7 @@ import St from 'gi://St'; import * as Background from './background.js'; import * as Layout from './layout.js'; import * as SwipeTracker from './swipeTracker.js'; +import * as Util from '../misc/util.js'; import * as Main from './main.js'; @@ -187,6 +188,25 @@ const MonitorGroup = GObject.registerClass({ } this.progress = this.getWorkspaceProgress(activeWorkspace); + + if (monitor.index === Main.layoutManager.primaryIndex) { + this._workspacesAdjustment = Main.createWorkspacesAdjustment(this); + this.bind_property_full('progress', + this._workspacesAdjustment, 'value', + GObject.BindingFlags.SYNC_CREATE, + (bind, source) => { + const indices = [ + workspaceIndices[Math.floor(source)], + workspaceIndices[Math.ceil(source)], + ]; + return [true, Util.lerp(...indices, source % 1.0)]; + }, + null); + + this.connect('destroy', () => { + delete this._workspacesAdjustment; + }); + } } get baseDistance() {