workspacesView: Work around Clutter optimization

Clutter nowadays omits reallocations when only the stage position
changed, that is when the allocation relative to the parent changed.

As a result (apart from better performance of course), workspaces
in the overview may now end up with an outdated "actual geometry"
in case the overview moved to a new primary monitor (of equal size
as the previous one).

Work around that by emitting a signal from the overview on allocation
changes, and use that to update the cached geometry.

We can revert that change once workspaces become part of the regular
overview hierarchy.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/3211
This commit is contained in:
Florian Müllner 2020-10-03 10:12:13 +02:00
parent d04daf6a1c
commit da36506ea5
2 changed files with 4 additions and 0 deletions

View File

@ -294,6 +294,7 @@ var Overview = class {
this._overview = new OverviewActor(); this._overview = new OverviewActor();
this._overview._delegate = this; this._overview._delegate = this;
Main.layoutManager.overviewGroup.add_child(this._overview); Main.layoutManager.overviewGroup.add_child(this._overview);
this._overview.connect('notify::allocation', () => this.emit('relayout'));
this._shellInfo = new ShellInfo(); this._shellInfo = new ShellInfo();

View File

@ -339,6 +339,9 @@ class WorkspacesDisplay extends St.Widget {
}); });
this.connect('notify::allocation', this._updateWorkspacesActualGeometry.bind(this)); this.connect('notify::allocation', this._updateWorkspacesActualGeometry.bind(this));
Main.overview.connect('relayout',
() => this._updateWorkspacesActualGeometry());
let workspaceManager = global.workspace_manager; let workspaceManager = global.workspace_manager;
this._scrollAdjustment = scrollAdjustment; this._scrollAdjustment = scrollAdjustment;