shellEntry: Restore natural-height-set instead of forcing it

If we are transitioning the label from 0 to its natural height, we
must set natural-height-set again after querying the preferred height,
otherwise Clutter would skip the transition.

However when transitioning in the opposite direction, setting the
property to true can go horribly wrong:
If the actor hasn't been allocated before, it will store a fixed
natural height of 0. But as there is no fixed min-height, we can
end up with min-height > natural-height, which is a fatal error.

(This isn't an issue when *actually* setting a fixed height, as
that will set both natural and minimum height)

So instead of always setting natural-height-set to true, restore
its previous value to fix the issue.

https://gitlab.gnome.org/GNOME/gnome-shell/issues/2255
This commit is contained in:
Florian Müllner 2020-02-21 19:38:53 +01:00 committed by verdre
parent 4759197200
commit 3633e1feca

View File

@ -191,9 +191,10 @@ class CapsLockWarning extends St.Label {
this.remove_all_transitions(); this.remove_all_transitions();
const { naturalHeightSet } = this;
this.natural_height_set = false; this.natural_height_set = false;
let [, height] = this.get_preferred_height(-1); let [, height] = this.get_preferred_height(-1);
this.natural_height_set = true; this.natural_height_set = naturalHeightSet;
this.ease({ this.ease({
height: capsLockOn ? height : 0, height: capsLockOn ? height : 0,