[gnome-shell/cherry-pick-1685c779] workspacesView: Update scroll position but not workspace on allocate
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell/cherry-pick-1685c779] workspacesView: Update scroll position but not workspace on allocate
- Date: Mon, 11 Jan 2021 16:56:48 +0000 (UTC)
commit b879dc85714041b139aad50e666fcfa87e6570ea
Author: Jonas Ådahl <jadahl gmail com>
Date: Fri Dec 18 15:21:58 2020 +0000
workspacesView: Update scroll position but not workspace on allocate
Not updating the scroll position on allocate caused a glitch, where a
window on a workspace that is not the first one would would be
transparent for one frame when showing the overview.
Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/3507
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1545>
(cherry picked from commit 1685c77931e390e7736caf6b0577bc48b0e62a4f)
js/ui/workspacesView.js | 31 +++++++++++++------------------
1 file changed, 13 insertions(+), 18 deletions(-)
---
diff --git a/js/ui/workspacesView.js b/js/ui/workspacesView.js
index 4a11f08889..2cc8b04897 100644
--- a/js/ui/workspacesView.js
+++ b/js/ui/workspacesView.js
@@ -78,11 +78,10 @@ class WorkspacesView extends WorkspacesViewBase {
this._animating = false; // tweening
this._gestureActive = false; // touch(pad) gestures
- this._updateScrollPositionId = 0;
this._scrollAdjustment = scrollAdjustment;
this._onScrollId = this._scrollAdjustment.connect('notify::value',
- this._updateScrollPosition.bind(this));
+ this._onScrollAdjustmentChanged.bind(this));
this._workspaces = [];
this._updateWorkspaces();
@@ -125,14 +124,7 @@ class WorkspacesView extends WorkspacesViewBase {
child.allocate_available_size(x, y, box.get_width(), box.get_height());
});
- // Update scroll position in an idle callback to avoid unintended
- // side effects (e.g. workspace switch) during layout.
- this._updateScrollPositionId =
- GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
- this._updateScrollPositionId = 0;
- this._updateScrollPosition();
- return GLib.SOURCE_REMOVE;
- });
+ this._updateScrollPosition();
}
getActiveWorkspace() {
@@ -235,8 +227,6 @@ class WorkspacesView extends WorkspacesViewBase {
_onDestroy() {
super._onDestroy();
- if (this._updateScrollPositionId)
- GLib.source_remove(this._updateScrollPositionId);
this._scrollAdjustment.disconnect(this._onScrollId);
global.window_manager.disconnect(this._switchWorkspaceNotifyId);
let workspaceManager = global.workspace_manager;
@@ -260,15 +250,10 @@ class WorkspacesView extends WorkspacesViewBase {
// sync the workspaces' positions to the value of the scroll adjustment
// and change the active workspace if appropriate
- _updateScrollPosition() {
+ _onScrollAdjustmentChanged() {
if (!this.has_allocation())
return;
- if (this._updateScrollPositionId) {
- GLib.source_remove(this._updateScrollPositionId);
- this._updateScrollPositionId = 0;
- }
-
const adj = this._scrollAdjustment;
const allowSwitch =
adj.get_transition('value') === null && !this._gestureActive;
@@ -291,9 +276,19 @@ class WorkspacesView extends WorkspacesViewBase {
metaWorkspace.activate(global.get_current_time());
}
+ this._updateScrollPosition();
+ }
+
+ _updateScrollPosition() {
+ if (!this.has_allocation())
+ return;
+
+ const adj = this._scrollAdjustment;
+
if (adj.upper == 1)
return;
+ const workspaceManager = global.workspace_manager;
const vertical = workspaceManager.layout_rows === -1;
const rtl = this.text_direction === Clutter.TextDirection.RTL;
const progress = vertical || !rtl
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]