userMenu: Indicate progress on status changes
Depending on the number of accounts, the type or simply the network, there may be a noticable lag between setting the status and the actual status change. Use the new user-status-pending icon to indicate progress. https://bugzilla.gnome.org/show_bug.cgi?id=659067
This commit is contained in:
parent
7911154bad
commit
e63f7e8779
@ -474,13 +474,22 @@ const UserMenuButton = new Lang.Class({
|
||||
style_class: 'popup-menu-icon' });
|
||||
this._idleIcon = new St.Icon({ icon_name: 'user-idle',
|
||||
style_class: 'popup-menu-icon' });
|
||||
this._pendingIcon = new St.Icon({ icon_name: 'user-status-pending',
|
||||
style_class: 'popup-menu-icon' });
|
||||
|
||||
this._accountMgr.connect('most-available-presence-changed',
|
||||
Lang.bind(this, this._updatePresenceIcon));
|
||||
this._accountMgr.connect('account-enabled',
|
||||
Lang.bind(this, this._onAccountEnabled));
|
||||
this._accountMgr.connect('account-disabled',
|
||||
Lang.bind(this, this._onAccountDisabled));
|
||||
this._accountMgr.connect('account-removed',
|
||||
Lang.bind(this, this._onAccountDisabled));
|
||||
this._accountMgr.prepare_async(null, Lang.bind(this,
|
||||
function(mgr) {
|
||||
let [presence, s, msg] = mgr.get_most_available_presence();
|
||||
this._updatePresenceIcon(mgr, presence, s, msg);
|
||||
this._setupAccounts();
|
||||
}));
|
||||
|
||||
this._name = new St.Label();
|
||||
@ -620,6 +629,46 @@ const UserMenuButton = new Lang.Class({
|
||||
this._iconBox.child = this._offlineIcon;
|
||||
},
|
||||
|
||||
_setupAccounts: function() {
|
||||
let accounts = this._accountMgr.get_valid_accounts();
|
||||
for (let i = 0; i < accounts.length; i++) {
|
||||
accounts[i]._changingId = accounts[i].connect('notify::connection-status',
|
||||
Lang.bind(this, this._updateChangingPresence));
|
||||
}
|
||||
this._updateChangingPresence();
|
||||
},
|
||||
|
||||
_onAccountEnabled: function(accountMgr, account) {
|
||||
if (!account._changingId)
|
||||
account._changingId = account.connect('notify::connection-status',
|
||||
Lang.bind(this, this._updateChangingPresence));
|
||||
this._updateChangingPresence();
|
||||
},
|
||||
|
||||
_onAccountDisabled: function(accountMgr, account) {
|
||||
account.disconnect(account._changingId);
|
||||
account._changingId = 0;
|
||||
this._updateChangingPresence();
|
||||
},
|
||||
|
||||
_updateChangingPresence: function() {
|
||||
let accounts = this._accountMgr.get_valid_accounts();
|
||||
let changing = false;
|
||||
for (let i = 0; i < accounts.length; i++) {
|
||||
if (accounts[i].connection_status == Tp.ConnectionStatus.CONNECTING) {
|
||||
changing = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (changing) {
|
||||
this._iconBox.child = this._pendingIcon;
|
||||
} else {
|
||||
let [presence, s, msg] = this._accountMgr.get_most_available_presence();
|
||||
this._updatePresenceIcon(this._accountMgr, presence, s, msg);
|
||||
}
|
||||
},
|
||||
|
||||
_createSubMenu: function() {
|
||||
let item;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user