[gnome-shell] dialogs: Use a smaller font-size if the title width exceeds the space
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] dialogs: Use a smaller font-size if the title width exceeds the space
- Date: Mon, 17 Feb 2020 21:47:49 +0000 (UTC)
commit 80a869e7686adf772512069d7818bda0379190d8
Author: Jonas Dreßler <verdre v0yd nl>
Date: Mon Feb 17 19:59:31 2020 +0100
dialogs: Use a smaller font-size if the title width exceeds the space
Since quite a few strings of dialogs provided by external programs are
not updated yet and the string freeze is already in effect, make sure we
don't break those dialogs by stripping aways large parts of the
headline.
To do that, detect if the title label is larger than the available width
and if it is, switch to a smaller font-size of 13pt. This makes sure we
still show about the same number of characters in the headline as we did
in previous releases.
https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/1012
data/theme/gnome-shell-sass/widgets/_dialogs.scss | 5 ++++
js/ui/dialog.js | 36 ++++++++++++++++++++++-
2 files changed, 40 insertions(+), 1 deletion(-)
---
diff --git a/data/theme/gnome-shell-sass/widgets/_dialogs.scss
b/data/theme/gnome-shell-sass/widgets/_dialogs.scss
index 6ee2b36ae2..229c54af2f 100644
--- a/data/theme/gnome-shell-sass/widgets/_dialogs.scss
+++ b/data/theme/gnome-shell-sass/widgets/_dialogs.scss
@@ -42,6 +42,11 @@
text-align: center;
font-size: 18pt;
font-weight: 800;
+
+ &.leightweight {
+ font-size: 13pt;
+ font-weight: 800;
+ }
}
.message-dialog-description { text-align: center; }
}
diff --git a/js/ui/dialog.js b/js/ui/dialog.js
index 2aa7fc37bb..694da4e151 100644
--- a/js/ui/dialog.js
+++ b/js/ui/dialog.js
@@ -1,7 +1,7 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
/* exported Dialog, MessageDialogContent, ListSection, ListSectionItem */
-const { Clutter, GObject, Pango, St } = imports.gi;
+const { Clutter, GObject, Meta, Pango, St } = imports.gi;
function _setLabel(label, value) {
label.set({
@@ -179,10 +179,20 @@ var MessageDialogContent = GObject.registerClass({
};
super._init(Object.assign(defaultParams, params));
+ this.connect('notify::size', this._updateTitleStyle.bind(this));
+ this.connect('destroy', this._onDestroy.bind(this));
+
this.add_child(this._title);
this.add_child(this._description);
}
+ _onDestroy() {
+ if (this._updateTitleStyleLater) {
+ Meta.later_remove(this._updateTitleStyleLater);
+ delete this._updateTitleStyleLater;
+ }
+ }
+
get title() {
return this._title.text;
}
@@ -191,8 +201,32 @@ var MessageDialogContent = GObject.registerClass({
return this._description.text;
}
+ _updateTitleStyle() {
+ if (!this._title.mapped)
+ return;
+
+ this._title.ensure_style();
+ const [, titleNatWidth] = this._title.get_preferred_width(-1);
+
+ if (titleNatWidth > this.width) {
+ if (this._updateTitleStyleLater)
+ return;
+
+ this._updateTitleStyleLater = Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => {
+ this._updateTitleStyleLater = 0;
+ this._title.add_style_class_name('leightweight');
+ return false;
+ });
+ }
+
+ }
+
set title(title) {
_setLabel(this._title, title);
+
+ this._title.remove_style_class_name('leightweight');
+ this._updateTitleStyle();
+
this.notify('title');
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]