[gnome-shell] userWidget: Use the user name if the real name doesn't fit
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] userWidget: Use the user name if the real name doesn't fit
- Date: Wed, 30 Oct 2013 17:19:15 +0000 (UTC)
commit a5dd44c77f691e613e67ac63c9e7527856abe5fc
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Mon Aug 26 18:36:16 2013 -0400
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
js/ui/userWidget.js | 109 ++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 87 insertions(+), 22 deletions(-)
---
diff --git a/js/ui/userWidget.js b/js/ui/userWidget.js
index f801a54..85676ec 100644
--- a/js/ui/userWidget.js
+++ b/js/ui/userWidget.js
@@ -1,7 +1,8 @@
-
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
//
// A widget showing the user avatar and name
+
+const Clutter = imports.gi.Clutter;
const AccountsService = imports.gi.AccountsService;
const GLib = imports.gi.GLib;
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({
Name: 'UserWidget',
@@ -67,22 +145,14 @@ const UserWidget = new Lang.Class({
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
this._avatar = new Avatar(user);
- this.actor.add(this._avatar.actor,
- { x_fill: true, y_fill: true });
-
- this._label = new St.Label({ style_class: 'user-widget-label' });
- this.actor.add(this._label,
- { expand: true,
- x_fill: true,
- y_fill: false,
- y_align: St.Align.MIDDLE });
-
- this._userLoadedId = this._user.connect('notify::is-loaded',
- Lang.bind(this, this._updateUser));
- this._userChangedId = this._user.connect('changed',
- Lang.bind(this, this._updateUser));
- if (this._user.is_loaded)
- this._updateUser();
+ this.actor.add_child(this._avatar.actor);
+
+ this._label = new UserWidgetLabel(user);
+ this.actor.add_child(this._label);
+
+ 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();
},
_onDestroy: function() {
@@ -98,11 +168,6 @@ const UserWidget = new Lang.Class({
},
_updateUser: function() {
- if (this._user.is_loaded)
- this._label.text = this._user.get_real_name();
- else
- this._label.text = '';
-
this._avatar.update();
}
});
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]