iconGrid: Keep icons reactive during pulse animation

The `reactive` property of icon actors was being restored multiple times
over the course of the pulse animation, all at slightly different times
as each icon finished animating at different times.

The problem is that toggling `reactive` on an `StWidget` incurs a style
change of the `insensitive` pseudo class, and style changes would quickly
queue relayouts incurring full stage reallocation. This occurred many times
during a pulse animation, limiting its smoothness and performance.

The solution is to not toggle the `reactive` property in the pulse
animation at all, which avoids incurring multiple full stage relayouts.

As a bonus, this means the icon under the cursor pulses with the correct
selection highlight, appearing more seamless and responsive.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/261
This commit is contained in:
Daniel van Vugt 2018-10-12 12:00:31 +08:00 committed by Florian Müllner
parent a5e6dd52d2
commit 1acdff822a

View File

@ -469,7 +469,6 @@ var IconGrid = new Lang.Class({
for (let index = 0; index < actors.length; index++) { for (let index = 0; index < actors.length; index++) {
let actor = actors[index]; let actor = actors[index];
actor.reactive = false;
actor.set_scale(0, 0); actor.set_scale(0, 0);
actor.set_pivot_point(0.5, 0.5); actor.set_pivot_point(0.5, 0.5);
@ -491,7 +490,6 @@ var IconGrid = new Lang.Class({
onComplete: () => { onComplete: () => {
if (isLastItem) if (isLastItem)
this._animationDone(); this._animationDone();
actor.reactive = true;
} }
}); });
} }