diff --git a/data/theme/gnome-shell-sass/widgets/_dialogs.scss b/data/theme/gnome-shell-sass/widgets/_dialogs.scss index 6ee2b36ae..229c54af2 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 2aa7fc37b..694da4e15 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'); }