forked from rpms/gnome-shell
71 lines
3.1 KiB
Diff
71 lines
3.1 KiB
Diff
From d4aeb9e5b94ba6bf9fe6f5c1652934c936f88fa2 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
|
|
Date: Tue, 9 Apr 2019 03:03:54 +0200
|
|
Subject: [PATCH 2/2] 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];
|
|
--
|
|
2.21.0
|
|
|