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
This commit is contained in:
parent
2fab75f448
commit
4e5ca6d376
@ -584,22 +584,18 @@ var Dash = class Dash {
|
|||||||
let firstButton = iconChildren[0].child;
|
let firstButton = iconChildren[0].child;
|
||||||
let firstIcon = firstButton._delegate.icon;
|
let firstIcon = firstButton._delegate.icon;
|
||||||
|
|
||||||
let minHeight, natHeight;
|
// Enforce valid spacings during the size request
|
||||||
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
|
|
||||||
|
|
||||||
// Enforce the current icon size during the size request
|
|
||||||
firstIcon.icon.ensure_style();
|
firstIcon.icon.ensure_style();
|
||||||
let [, currentHeight] = firstIcon.icon.get_size();
|
let [, iconHeight] = firstIcon.icon.get_preferred_height(-1);
|
||||||
firstIcon.icon.set_height(this.iconSize * scaleFactor);
|
let [, buttonHeight] = firstButton.get_preferred_height(-1);
|
||||||
[minHeight, natHeight] = firstButton.get_preferred_height(-1);
|
|
||||||
firstIcon.icon.set_height(currentHeight);
|
|
||||||
|
|
||||||
// Subtract icon padding and box spacing from the available height
|
// 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;
|
(iconChildren.length - 1) * spacing;
|
||||||
|
|
||||||
let availSize = availHeight / iconChildren.length;
|
let availSize = availHeight / iconChildren.length;
|
||||||
|
|
||||||
|
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
|
||||||
let iconSizes = baseIconSizes.map(s => s * scaleFactor);
|
let iconSizes = baseIconSizes.map(s => s * scaleFactor);
|
||||||
|
|
||||||
let newIconSize = baseIconSizes[0];
|
let newIconSize = baseIconSizes[0];
|
||||||
|
Loading…
Reference in New Issue
Block a user