Compare commits

...

3 Commits

Author SHA1 Message Date
Georges Basile Stavracas Neto
5813850fe1
system: Use username if full name is longer than 100 characters
The current code relies on unstable behavior of ClutterText, and
does not really work as expected. Still, limiting the label size
is important.

Use a hardcoded limit of 100 characters instead of checking if
the layout is ellipsized already.
2019-02-07 17:54:35 -02:00
Georges Basile Stavracas Neto
1ee73ac357
system: Ellipsize user name
For the same reasons explained in the previous commit,
ellipsize the user name in UserWidget as well. This
covers a various other places like GDM.
2019-02-07 17:54:19 -02:00
Georges Basile Stavracas Neto
65cbf4aa45
system: Ellipsize user names
Users may have long user names, (but not too long [1])
so it makes sense to limit how much the label can grow.
Otherwise, the popup may overflow even the biggest
screens.

Ellipsize the user name label.

[1] https://gitlab.gnome.org/GNOME/gnome-control-center/merge_requests/385
2019-02-07 17:51:21 -02:00
2 changed files with 11 additions and 10 deletions

View File

@ -4,6 +4,7 @@ const AccountsService = imports.gi.AccountsService;
const Clutter = imports.gi.Clutter;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const Pango = imports.gi.Pango;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const GObject = imports.gi.GObject;
@ -163,18 +164,15 @@ var Indicator = class extends PanelMenu.SystemIndicator {
}
_updateSwitchUserSubMenu() {
this._switchUserSubMenu.label.text = this._user.get_real_name();
let clutterText = this._switchUserSubMenu.label.clutter_text;
let realName = this._user.get_real_name();
// XXX -- for some reason, the ClutterText's width changes
// rapidly unless we force a relayout of the actor. Probably
// a size cache issue or something. Moving this to be a layout
// manager would be a much better idea.
clutterText.get_allocation_box();
let layout = clutterText.get_layout();
if (layout.is_ellipsized())
// In theory, GNOME allows creating users with names up to 255
// characters, but such long names look terribly bad, so limit
// to 100 and it should fit the vast majority of screen sizes.
if (realName.length > 100)
this._switchUserSubMenu.label.text = this._user.get_user_name();
else
this._switchUserSubMenu.label.text = realName;
let iconFile = this._user.get_icon_file();
if (iconFile && !GLib.file_test(iconFile, GLib.FileTest.EXISTS))
@ -211,6 +209,7 @@ var Indicator = class extends PanelMenu.SystemIndicator {
this._switchUserSubMenu = new PopupMenu.PopupSubMenuMenuItem('', true);
this._switchUserSubMenu.icon.style_class = 'system-switch-user-submenu-icon';
this._switchUserSubMenu.label.clutter_text.ellipsize = Pango.EllipsizeMode.END;
// Since the label of the switch user submenu depends on the width of
// the popup menu, and we can't easily connect on allocation-changed

View File

@ -7,6 +7,7 @@ const AccountsService = imports.gi.AccountsService;
const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;
const GObject = imports.gi.GObject;
const Pango = imports.gi.Pango;
const St = imports.gi.St;
const Params = imports.misc.params;
@ -72,6 +73,7 @@ class UserWidgetLabel extends St.Widget {
this._realNameLabel = new St.Label({ style_class: 'user-widget-label',
y_align: Clutter.ActorAlign.CENTER });
this._realNameLabel.clutter_text.ellipsize = Pango.EllipsizeMode.END;
this.add_child(this._realNameLabel);
this._userNameLabel = new St.Label({ style_class: 'user-widget-label',