Animate workspace indicator before adding/removing workspaces
Rather than killing the workspace indicator indicator when we remove workspaces because the source and target locations might have changed, do it as a separate first step. This provides a better explanation than doing it simultaneously with the addition/removal or not at all and also keeps our computations simple. https://bugzilla.gnome.org/show_bug.cgi?id=641881
This commit is contained in:
parent
649ed3332f
commit
e9a45190e4
@ -397,6 +397,7 @@ ThumbnailsBox.prototype = {
|
|||||||
this._scale = 0;
|
this._scale = 0;
|
||||||
this._pendingScaleUpdate = false;
|
this._pendingScaleUpdate = false;
|
||||||
this._stateUpdateQueued = false;
|
this._stateUpdateQueued = false;
|
||||||
|
this._animatingIndicator = false;
|
||||||
|
|
||||||
this._stateCounts = {};
|
this._stateCounts = {};
|
||||||
for (key in ThumbnailState)
|
for (key in ThumbnailState)
|
||||||
@ -476,15 +477,6 @@ ThumbnailsBox.prototype = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this._queueUpdateStates();
|
this._queueUpdateStates();
|
||||||
|
|
||||||
// If we removed the current workspace, then metacity will have already
|
|
||||||
// switched to an adjacent workspace. Leaving the animation we
|
|
||||||
// started in response to that around will look funny because it's an
|
|
||||||
// animation for the *old* workspace configuration. So, kill it.
|
|
||||||
// If we animate the workspace removal in the future, we should animate
|
|
||||||
// the indicator as part of that.
|
|
||||||
Tweener.removeTweens(this._thumbnailIndicator);
|
|
||||||
this._constrainThumbnailIndicator();
|
|
||||||
},
|
},
|
||||||
|
|
||||||
syncStacking: function(stackIndices) {
|
syncStacking: function(stackIndices) {
|
||||||
@ -529,7 +521,11 @@ ThumbnailsBox.prototype = {
|
|||||||
_updateStates: function() {
|
_updateStates: function() {
|
||||||
this._stateUpdateQueued = false;
|
this._stateUpdateQueued = false;
|
||||||
|
|
||||||
// First thing to do is to start sliding out any thumbnails that have been destroyed
|
// If we are animating the indicator, wait
|
||||||
|
if (this._animatingIndicator)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Then slide out any thumbnails that have been destroyed
|
||||||
this._iterateStateThumbnails(ThumbnailState.REMOVING,
|
this._iterateStateThumbnails(ThumbnailState.REMOVING,
|
||||||
function(thumbnail) {
|
function(thumbnail) {
|
||||||
this._setThumbnailState(thumbnail, ThumbnailState.ANIMATING_OUT);
|
this._setThumbnailState(thumbnail, ThumbnailState.ANIMATING_OUT);
|
||||||
@ -780,13 +776,18 @@ ThumbnailsBox.prototype = {
|
|||||||
this._indicator.width = oldAllocation.x2 - oldAllocation.x1;
|
this._indicator.width = oldAllocation.x2 - oldAllocation.x1;
|
||||||
this._indicator.height = oldAllocation.y2 - oldAllocation.y1;
|
this._indicator.height = oldAllocation.y2 - oldAllocation.y1;
|
||||||
|
|
||||||
|
this._animatingIndicator = true;
|
||||||
Tweener.addTween(this._indicator,
|
Tweener.addTween(this._indicator,
|
||||||
{ x: thumbnail.actor.allocation.x1,
|
{ x: thumbnail.actor.allocation.x1,
|
||||||
y: thumbnail.actor.allocation.y1,
|
y: thumbnail.actor.allocation.y1,
|
||||||
time: WorkspacesView.WORKSPACE_SWITCH_TIME,
|
time: WorkspacesView.WORKSPACE_SWITCH_TIME,
|
||||||
transition: 'easeOutQuad',
|
transition: 'easeOutQuad',
|
||||||
onComplete: Lang.bind(this,
|
onComplete: function() {
|
||||||
this._constrainThumbnailIndicator)
|
this._animatingIndicator = false;
|
||||||
|
this._constrainThumbnailIndicator();
|
||||||
|
this._queueUpdateStates();
|
||||||
|
},
|
||||||
|
onCompleteScope: this
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user