userMenu: Delay restoring presence until the network comes up

Trying to connect to IM servers while offline is pointless, in
particular now that we added a progress indication which makes
the connection attempt very visible.
To fix, wait for the network to become available until restoring
a previous IM presence.

https://bugzilla.gnome.org/show_bug.cgi?id=677982
This commit is contained in:
Florian Müllner 2012-06-13 01:03:33 +02:00
parent a2e0e0ad06
commit 0f065ebce6

View File

@ -205,20 +205,19 @@ const IMStatusChooserItem = new Lang.Class({
Lang.bind(this, this._IMAccountsChanged)); Lang.bind(this, this._IMAccountsChanged));
this._accountMgr.prepare_async(null, Lang.bind(this, this._accountMgr.prepare_async(null, Lang.bind(this,
function(mgr) { function(mgr) {
let [presence, status, msg] = mgr.get_most_available_presence();
let savedPresence = global.settings.get_int('saved-im-presence');
this._IMAccountsChanged(mgr); this._IMAccountsChanged(mgr);
if (savedPresence == presence) { if (this._networkMonitor.network_available)
this._IMStatusChanged(mgr, presence, status, msg); this._restorePresence();
} else { else
this._setComboboxPresence(savedPresence); this._setComboboxPresence(Tp.ConnectionPresenceType.OFFLINE);
status = this._statusForPresence(savedPresence); }));
msg = msg ? msg : '';
mgr.set_all_requested_presences(savedPresence, status, msg); this._networkMonitor = Gio.NetworkMonitor.get_default();
} this._networkMonitor.connect('network-changed',
Lang.bind(this, function(monitor, available) {
if (available && !this._imPresenceRestored)
this._restorePresence();
})); }));
this._userLoadedId = this._user.connect('notify::is-loaded', this._userLoadedId = this._user.connect('notify::is-loaded',
@ -233,6 +232,21 @@ const IMStatusChooserItem = new Lang.Class({
})); }));
}, },
_restorePresence: function() {
let [presence, status, msg] = this._accountMgr.get_most_available_presence();
let savedPresence = global.settings.get_int('saved-im-presence');
if (savedPresence == presence) {
this._IMStatusChanged(this._accountMgr, presence, status, msg);
} else {
this._setComboboxPresence(savedPresence);
status = this._statusForPresence(savedPresence);
msg = msg ? msg : '';
this._accountMgr.set_all_requested_presences(savedPresence, status, msg);
}
},
destroy: function() { destroy: function() {
// clean up signal handlers // clean up signal handlers
if (this._userLoadedId != 0) { if (this._userLoadedId != 0) {