iconGrid: Remove clones on new animation

Until now we were waiting the animation to complete to allow the user to
make a new animation. This could bring some problems and annoy nervous
users.
Instead of that, destroy clones on new animations triggers and
create a new animation with the new direction.

https://bugzilla.gnome.org/show_bug.cgi?id=736148
This commit is contained in:
Carlos Soriano 2014-09-05 19:33:37 +02:00 committed by Florian Müllner
parent c67eabaf62
commit 96a49770a4

View File

@ -267,6 +267,7 @@ var IconGrid = new Lang.Class({
this.actor = new St.BoxLayout({ style_class: 'icon-grid', this.actor = new St.BoxLayout({ style_class: 'icon-grid',
vertical: true }); vertical: true });
this._items = []; this._items = [];
this._clonesAnimating = [];
// Pulled from CSS, but hardcode some defaults here // Pulled from CSS, but hardcode some defaults here
this._spacing = 0; this._spacing = 0;
this._hItemSize = this._vItemSize = ICON_SIZE; this._hItemSize = this._vItemSize = ICON_SIZE;
@ -410,8 +411,13 @@ var IconGrid = new Lang.Class({
return this._getVisibleChildren(); return this._getVisibleChildren();
}, },
_cancelAnimation: function() {
this._clonesAnimating.forEach(clone => { clone.destroy(); });
this._clonesAnimating = [];
},
_animationDone: function() { _animationDone: function() {
this._animating = false; this._clonesAnimating = [];
this.emit('animation-done'); this.emit('animation-done');
}, },
@ -419,10 +425,7 @@ var IconGrid = new Lang.Class({
if (animationDirection != AnimationDirection.IN) if (animationDirection != AnimationDirection.IN)
throw new Error("Pulse animation only implements 'in' animation direction"); throw new Error("Pulse animation only implements 'in' animation direction");
if (this._animating) this._cancelAnimation();
return;
this._animating = true;
let actors = this._getChildrenToAnimate(); let actors = this._getChildrenToAnimate();
if (actors.length == 0) { if (actors.length == 0) {
@ -470,10 +473,7 @@ var IconGrid = new Lang.Class({
}, },
animateSpring: function(animationDirection, sourceActor) { animateSpring: function(animationDirection, sourceActor) {
if (this._animating) this._cancelAnimation();
return;
this._animating = true;
let actors = this._getChildrenToAnimate(); let actors = this._getChildrenToAnimate();
if (actors.length == 0) { if (actors.length == 0) {
@ -507,6 +507,7 @@ var IconGrid = new Lang.Class({
actor.reactive = false; actor.reactive = false;
let actorClone = new Clutter.Clone({ source: actor }); let actorClone = new Clutter.Clone({ source: actor });
this._clonesAnimating.push(actorClone);
Main.uiGroup.add_actor(actorClone); Main.uiGroup.add_actor(actorClone);
let [width, height,,] = this._getAllocatedChildSizeAndSpacing(actor); let [width, height,,] = this._getAllocatedChildSizeAndSpacing(actor);