overviewControls: Remove transitions before updating adjustment value

The workspace switcher blocks state updates while the indicator is
animating. Since commit 9c1940ef9d the indicator is considered to
be animating when the workspace adjustment's value doesn't equal the
active workspace.

There is one case though where this breaks badly: When a workspace
is inserted before the active one, the adjustment's upper and value
properties are changed without transitions. But if that change happens
while there's an ongoing transition to the previously active workspace,
the value gets out of sync with the active workspace and we end up
blocking state updates indefinitely.

Fix this by removing any transitions before setting the adjustment
value.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2625

(cherry picked from commit 2e80995f19)
This commit is contained in:
Florian Müllner 2020-04-28 01:04:08 +02:00 committed by Robert Mader
parent 890f5b591f
commit 9497ddd68a

View File

@ -473,6 +473,7 @@ class ControlsManager extends St.Widget {
// A workspace might have been inserted or removed before the active // A workspace might have been inserted or removed before the active
// one, causing the adjustment to go out of sync, so update the value // one, causing the adjustment to go out of sync, so update the value
this._workspaceAdjustment.remove_transition('value');
this._workspaceAdjustment.value = activeIndex; this._workspaceAdjustment.value = activeIndex;
} }