diff --git a/js/ui/workspacesView.js b/js/ui/workspacesView.js index ae9be2bfd..9ac6be631 100644 --- a/js/ui/workspacesView.js +++ b/js/ui/workspacesView.js @@ -450,6 +450,7 @@ class WorkspacesDisplay extends St.Widget { this._keyPressEventId = 0; this._scrollTimeoutId = 0; + this._actualGeometry = null; this._fullGeometry = null; this._inWindowDrag = false; @@ -690,8 +691,10 @@ class WorkspacesDisplay extends St.Widget { this._workspacesViews.forEach(v => v.show()); - this._updateWorkspacesFullGeometry(); - this._updateWorkspacesActualGeometry(); + if (this._fullGeometry) + this._syncWorkspacesFullGeometry(); + if (this._actualGeometry) + this._syncWorkspacesActualGeometry(); } _getMonitorIndexForEvent(event) { @@ -743,10 +746,10 @@ class WorkspacesDisplay extends St.Widget { // the sliding controls were never slid in at all. setWorkspacesFullGeometry(geom) { this._fullGeometry = geom; - this._updateWorkspacesFullGeometry(); + this._syncWorkspacesFullGeometry(); } - _updateWorkspacesFullGeometry() { + _syncWorkspacesFullGeometry() { if (!this._workspacesViews.length) return; @@ -758,18 +761,21 @@ class WorkspacesDisplay extends St.Widget { } _updateWorkspacesActualGeometry() { + const [x, y] = this.get_transformed_position(); + const width = this.allocation.get_width(); + const height = this.allocation.get_height(); + + this._actualGeometry = { x, y, width, height }; + this._syncWorkspacesActualGeometry(); + } + + _syncWorkspacesActualGeometry() { if (!this._workspacesViews.length) return; - let [x, y] = this.get_transformed_position(); - let allocation = this.allocation; - let width = allocation.x2 - allocation.x1; - let height = allocation.y2 - allocation.y1; - let primaryGeometry = { x, y, width, height }; - let monitors = Main.layoutManager.monitors; for (let i = 0; i < monitors.length; i++) { - let geometry = i == this._primaryIndex ? primaryGeometry : monitors[i]; + let geometry = i === this._primaryIndex ? this._actualGeometry : monitors[i]; this._workspacesViews[i].setActualGeometry(geometry); } }