[gnome-shell] dash: Fix messed up icon height



commit 4e5ca6d376e6a57a78fe38f77e12e8c6b7210725
Author: Florian Müllner <fmuellner gnome org>
Date:   Tue Apr 9 03:03:54 2019 +0200

    dash: Fix messed up icon height
    
    When determining the biggest icon size that fits the available height,
    we first subtract the additional space requirements of icons (spacing,
    padding, running indicator etc.) and then divide the result by the
    number of icons to get the maximum size available to each icon texture.
    
    In the above, the additional space requirement of each icon is taken
    from the first icon (as all icons are assumed to be the same), and
    calculated as the difference between the icon button's preferred height
    and the currently used icon size.
    
    To make sure that the icon is actually using the dash's current icon
    size (even while animating to a new icon size), we enforce its height
    during the size request and restore its original height afterwards.
    
    However after some recent changes, that step is causing troubles:
    For some reason, the original height may be 0, and when we restore it,
    we end up forcing a fixed non-height that bypasses the regular size
    request machinery.
    
    While it is unclear where exactly the zero height comes from (maybe
    waiting for a valid resource scale?), it is clear that it's best
    to avoid forcing a fixed height. So instead of making the icon
    texture comply with the assumed icon size, adjust the calculations
    to use its current height request.
    
    https://gitlab.gnome.org/GNOME/gnome-shell/issues/1053

 js/ui/dash.js | 14 +++++---------
 1 file changed, 5 insertions(+), 9 deletions(-)
---
diff --git a/js/ui/dash.js b/js/ui/dash.js
index e60cdd8ad..6b5aeffb1 100644
--- a/js/ui/dash.js
+++ b/js/ui/dash.js
@@ -584,22 +584,18 @@ var Dash = class Dash {
         let firstButton = iconChildren[0].child;
         let firstIcon = firstButton._delegate.icon;
 
-        let minHeight, natHeight;
-        let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
-
-        // Enforce the current icon size during the size request
+        // Enforce valid spacings during the size request
         firstIcon.icon.ensure_style();
-        let [, currentHeight] = firstIcon.icon.get_size();
-        firstIcon.icon.set_height(this.iconSize * scaleFactor);
-        [minHeight, natHeight] = firstButton.get_preferred_height(-1);
-        firstIcon.icon.set_height(currentHeight);
+        let [, iconHeight] = firstIcon.icon.get_preferred_height(-1);
+        let [, buttonHeight] = firstButton.get_preferred_height(-1);
 
         // Subtract icon padding and box spacing from the available height
-        availHeight -= iconChildren.length * (natHeight - this.iconSize * scaleFactor) +
+        availHeight -= iconChildren.length * (buttonHeight - iconHeight) +
                        (iconChildren.length - 1) * spacing;
 
         let availSize = availHeight / iconChildren.length;
 
+        let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
         let iconSizes = baseIconSizes.map(s => s * scaleFactor);
 
         let newIconSize = baseIconSizes[0];


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]