userWidget: Use the user name if the real name doesn't fit
This meets the new designs. https://bugzilla.gnome.org/show_bug.cgi?id=706851
This commit is contained in:
parent
8f86fd6bae
commit
a5dd44c77f
@ -1,7 +1,8 @@
|
|||||||
|
|
||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
//
|
//
|
||||||
// A widget showing the user avatar and name
|
// A widget showing the user avatar and name
|
||||||
|
|
||||||
|
const Clutter = imports.gi.Clutter;
|
||||||
const AccountsService = imports.gi.AccountsService;
|
const AccountsService = imports.gi.AccountsService;
|
||||||
const GLib = imports.gi.GLib;
|
const GLib = imports.gi.GLib;
|
||||||
const Gio = imports.gi.Gio;
|
const Gio = imports.gi.Gio;
|
||||||
@ -56,6 +57,83 @@ const Avatar = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const UserWidgetLabel = new Lang.Class({
|
||||||
|
Name: 'UserWidgetLabel',
|
||||||
|
Extends: St.Widget,
|
||||||
|
|
||||||
|
_init: function(user) {
|
||||||
|
this.parent({ layout_manager: new Clutter.BinLayout() });
|
||||||
|
|
||||||
|
this._user = user;
|
||||||
|
|
||||||
|
this._realNameLabel = new St.Label({ style_class: 'user-widget-label',
|
||||||
|
y_align: Clutter.ActorAlign.CENTER });
|
||||||
|
this.add_child(this._realNameLabel);
|
||||||
|
|
||||||
|
this._userNameLabel = new St.Label({ style_class: 'user-widget-label',
|
||||||
|
y_align: Clutter.ActorAlign.CENTER });
|
||||||
|
this.add_child(this._userNameLabel);
|
||||||
|
|
||||||
|
this._currentLabel = null;
|
||||||
|
|
||||||
|
this._userLoadedId = this._user.connect('notify::is-loaded', Lang.bind(this, this._updateUser));
|
||||||
|
this._userChangedId = this._user.connect('changed', Lang.bind(this, this._updateUser));
|
||||||
|
this._updateUser();
|
||||||
|
},
|
||||||
|
|
||||||
|
vfunc_destroy: function() {
|
||||||
|
if (this._userLoadedId != 0) {
|
||||||
|
this._user.disconnect(this._userLoadedId);
|
||||||
|
this._userLoadedId = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this._userChangedId != 0) {
|
||||||
|
this._user.disconnect(this._userChangedId);
|
||||||
|
this._userChangedId = 0;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
vfunc_allocate: function(box, flags) {
|
||||||
|
this.set_allocation(box, flags);
|
||||||
|
|
||||||
|
let availWidth = box.x2 - box.x1;
|
||||||
|
let availHeight = box.y2 - box.y1;
|
||||||
|
|
||||||
|
let [minRealNameWidth, minRealNameHeight,
|
||||||
|
natRealNameWidth, natRealNameHeight] = this._realNameLabel.get_preferred_size();
|
||||||
|
|
||||||
|
let [minUserNameWidth, minUserNameHeight,
|
||||||
|
natUserNameWidth, natUserNameHeight] = this._userNameLabel.get_preferred_size();
|
||||||
|
|
||||||
|
if (natRealNameWidth <= availWidth)
|
||||||
|
this._currentLabel = this._realNameLabel;
|
||||||
|
else
|
||||||
|
this._currentLabel = this._userNameLabel;
|
||||||
|
|
||||||
|
let childBox = new Clutter.ActorBox();
|
||||||
|
childBox.x1 = 0;
|
||||||
|
childBox.y1 = 0;
|
||||||
|
childBox.x2 = availWidth;
|
||||||
|
childBox.y2 = availHeight;
|
||||||
|
|
||||||
|
this._currentLabel.allocate(childBox, flags);
|
||||||
|
},
|
||||||
|
|
||||||
|
vfunc_paint: function() {
|
||||||
|
this._currentLabel.paint();
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateUser: function() {
|
||||||
|
if (this._user.is_loaded) {
|
||||||
|
this._realNameLabel.text = this._user.get_real_name();
|
||||||
|
this._userNameLabel.text = this._user.get_user_name();
|
||||||
|
} else {
|
||||||
|
this._realNameLabel.text = '';
|
||||||
|
this._userNameLabel.text = '';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
const UserWidget = new Lang.Class({
|
const UserWidget = new Lang.Class({
|
||||||
Name: 'UserWidget',
|
Name: 'UserWidget',
|
||||||
|
|
||||||
@ -67,22 +145,14 @@ const UserWidget = new Lang.Class({
|
|||||||
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
||||||
|
|
||||||
this._avatar = new Avatar(user);
|
this._avatar = new Avatar(user);
|
||||||
this.actor.add(this._avatar.actor,
|
this.actor.add_child(this._avatar.actor);
|
||||||
{ x_fill: true, y_fill: true });
|
|
||||||
|
|
||||||
this._label = new St.Label({ style_class: 'user-widget-label' });
|
this._label = new UserWidgetLabel(user);
|
||||||
this.actor.add(this._label,
|
this.actor.add_child(this._label);
|
||||||
{ expand: true,
|
|
||||||
x_fill: true,
|
|
||||||
y_fill: false,
|
|
||||||
y_align: St.Align.MIDDLE });
|
|
||||||
|
|
||||||
this._userLoadedId = this._user.connect('notify::is-loaded',
|
this._userLoadedId = this._user.connect('notify::is-loaded', Lang.bind(this, this._updateUser));
|
||||||
Lang.bind(this, this._updateUser));
|
this._userChangedId = this._user.connect('changed', Lang.bind(this, this._updateUser));
|
||||||
this._userChangedId = this._user.connect('changed',
|
this._updateUser();
|
||||||
Lang.bind(this, this._updateUser));
|
|
||||||
if (this._user.is_loaded)
|
|
||||||
this._updateUser();
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_onDestroy: function() {
|
_onDestroy: function() {
|
||||||
@ -98,11 +168,6 @@ const UserWidget = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_updateUser: function() {
|
_updateUser: function() {
|
||||||
if (this._user.is_loaded)
|
|
||||||
this._label.text = this._user.get_real_name();
|
|
||||||
else
|
|
||||||
this._label.text = '';
|
|
||||||
|
|
||||||
this._avatar.update();
|
this._avatar.update();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user