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:
parent
c67eabaf62
commit
96a49770a4
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user