workspace: Move fading minimized windows out of allocation
eee2ccac
fixed window opacity being changed outside of transitions but
resulted in the final step of the transition, that would set the window
to fully opaque, being missed.
This change now moves the opacity change entirely out of allocation and
instead follows the adjustment changes directly, which still fixes the
original bug and ensures the opacity is also applied for the last step
in the transition.
Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4561
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1957>
This commit is contained in:
parent
0d8e0025d6
commit
b90a6d6b14
@ -429,6 +429,7 @@ var WorkspaceLayout = GObject.registerClass({
|
|||||||
});
|
});
|
||||||
|
|
||||||
this._stateAdjustment.connect('notify::value', () => {
|
this._stateAdjustment.connect('notify::value', () => {
|
||||||
|
this._syncOpacities();
|
||||||
this.syncOverlays();
|
this.syncOverlays();
|
||||||
this.layout_changed();
|
this.layout_changed();
|
||||||
});
|
});
|
||||||
@ -437,6 +438,17 @@ var WorkspaceLayout = GObject.registerClass({
|
|||||||
this._workareasChangedId = 0;
|
this._workareasChangedId = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_syncOpacity(actor, metaWindow) {
|
||||||
|
if (!metaWindow.showing_on_its_workspace())
|
||||||
|
actor.opacity = this._stateAdjustment.value * 255;
|
||||||
|
}
|
||||||
|
|
||||||
|
_syncOpacities() {
|
||||||
|
this._windows.forEach(({ metaWindow }, actor) => {
|
||||||
|
this._syncOpacity(actor, metaWindow);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
_isBetterScaleAndSpace(oldScale, oldSpace, scale, space) {
|
_isBetterScaleAndSpace(oldScale, oldSpace, scale, space) {
|
||||||
let spacePower = (space - oldSpace) * LAYOUT_SPACE_WEIGHT;
|
let spacePower = (space - oldSpace) * LAYOUT_SPACE_WEIGHT;
|
||||||
let scalePower = (scale - oldScale) * LAYOUT_SCALE_WEIGHT;
|
let scalePower = (scale - oldScale) * LAYOUT_SCALE_WEIGHT;
|
||||||
@ -627,7 +639,7 @@ var WorkspaceLayout = GObject.registerClass({
|
|||||||
}
|
}
|
||||||
|
|
||||||
const { ControlsState } = OverviewControls;
|
const { ControlsState } = OverviewControls;
|
||||||
const { currentState, transitioning } =
|
const { currentState } =
|
||||||
this._overviewAdjustment.getStateTransitionParams();
|
this._overviewAdjustment.getStateTransitionParams();
|
||||||
const inSessionTransition = currentState <= ControlsState.WINDOW_PICKER;
|
const inSessionTransition = currentState <= ControlsState.WINDOW_PICKER;
|
||||||
|
|
||||||
@ -689,9 +701,6 @@ var WorkspaceLayout = GObject.registerClass({
|
|||||||
workspaceBoxY = workareaY * allocationScale;
|
workspaceBoxY = workareaY * allocationScale;
|
||||||
workspaceBoxWidth = 0;
|
workspaceBoxWidth = 0;
|
||||||
workspaceBoxHeight = 0;
|
workspaceBoxHeight = 0;
|
||||||
|
|
||||||
if (transitioning)
|
|
||||||
child.opacity = stateAdjustementValue * 255;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Don't allow the scaled floating size to drop below
|
// Don't allow the scaled floating size to drop below
|
||||||
@ -792,6 +801,7 @@ var WorkspaceLayout = GObject.registerClass({
|
|||||||
return winA.get_stable_sequence() - winB.get_stable_sequence();
|
return winA.get_stable_sequence() - winB.get_stable_sequence();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this._syncOpacity(window, metaWindow);
|
||||||
this._syncOverlay(window);
|
this._syncOverlay(window);
|
||||||
this._container.add_child(window);
|
this._container.add_child(window);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user