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: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2881>
This commit is contained in:
Georges Basile Stavracas Neto 2023-08-10 16:59:00 -03:00 committed by Marge Bot
parent f1db3498eb
commit f497e863fd

View File

@ -9,6 +9,7 @@ import St from 'gi://St';
import * as Background from './background.js'; import * as Background from './background.js';
import * as Layout from './layout.js'; import * as Layout from './layout.js';
import * as SwipeTracker from './swipeTracker.js'; import * as SwipeTracker from './swipeTracker.js';
import * as Util from '../misc/util.js';
import * as Main from './main.js'; import * as Main from './main.js';
@ -187,6 +188,25 @@ const MonitorGroup = GObject.registerClass({
} }
this.progress = this.getWorkspaceProgress(activeWorkspace); 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() { get baseDistance() {