user-menu: Restore previous session presence at startup
Save the session presence in GSettings and restore it on startup. https://bugzilla.gnome.org/show_bug.cgi?id=659021
This commit is contained in:
parent
39c5d23a87
commit
2947b92148
@ -54,6 +54,10 @@
|
|||||||
<default>0</default>
|
<default>0</default>
|
||||||
<_summary></_summary>
|
<_summary></_summary>
|
||||||
</key>
|
</key>
|
||||||
|
<key name="saved-session-presence" type="i">
|
||||||
|
<default>0</default>
|
||||||
|
<_summary></_summary>
|
||||||
|
</key>
|
||||||
<child name="clock" schema="org.gnome.shell.clock"/>
|
<child name="clock" schema="org.gnome.shell.clock"/>
|
||||||
<child name="calendar" schema="org.gnome.shell.calendar"/>
|
<child name="calendar" schema="org.gnome.shell.calendar"/>
|
||||||
<child name="recorder" schema="org.gnome.shell.recorder"/>
|
<child name="recorder" schema="org.gnome.shell.recorder"/>
|
||||||
|
@ -158,10 +158,11 @@ IMStatusChooserItem.prototype = {
|
|||||||
Lang.bind(this, this._changeIMStatus));
|
Lang.bind(this, this._changeIMStatus));
|
||||||
|
|
||||||
this._presence = new GnomeSession.Presence();
|
this._presence = new GnomeSession.Presence();
|
||||||
this._presence.getStatus(Lang.bind(this, this._sessionStatusChanged));
|
|
||||||
this._presence.connect('StatusChanged',
|
this._presence.connect('StatusChanged',
|
||||||
Lang.bind(this, this._sessionStatusChanged));
|
Lang.bind(this, this._sessionStatusChanged));
|
||||||
|
|
||||||
|
this._sessionPresenceRestored = false;
|
||||||
|
this._imPresenceRestored = false;
|
||||||
this._currentPresence = undefined;
|
this._currentPresence = undefined;
|
||||||
|
|
||||||
this._accountMgr = Tp.AccountManager.dup()
|
this._accountMgr = Tp.AccountManager.dup()
|
||||||
@ -267,12 +268,20 @@ IMStatusChooserItem.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
_IMStatusChanged: function(accountMgr, presence, status, message) {
|
_IMStatusChanged: function(accountMgr, presence, status, message) {
|
||||||
|
if (!this._imPresenceRestored)
|
||||||
|
this._imPresenceRestored = true;
|
||||||
|
|
||||||
if (presence == this._currentPresence)
|
if (presence == this._currentPresence)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this._currentPresence = presence;
|
this._currentPresence = presence;
|
||||||
this._setComboboxPresence(presence);
|
this._setComboboxPresence(presence);
|
||||||
|
|
||||||
|
if (!this._sessionPresenceRestored) {
|
||||||
|
this._presence.getStatus(Lang.bind(this, this._sessionStatusChanged));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (presence == Tp.ConnectionPresenceType.AVAILABLE)
|
if (presence == Tp.ConnectionPresenceType.AVAILABLE)
|
||||||
this._presence.setStatus(GnomeSession.PresenceStatus.AVAILABLE);
|
this._presence.setStatus(GnomeSession.PresenceStatus.AVAILABLE);
|
||||||
|
|
||||||
@ -349,6 +358,20 @@ IMStatusChooserItem.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
_sessionStatusChanged: function(sessionPresence, sessionStatus) {
|
_sessionStatusChanged: function(sessionPresence, sessionStatus) {
|
||||||
|
if (!this._imPresenceRestored)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!this._sessionPresenceRestored) {
|
||||||
|
let savedStatus = global.settings.get_int('saved-session-presence');
|
||||||
|
if (sessionStatus != savedStatus) {
|
||||||
|
this._presence.setStatus(savedStatus);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this._sessionPresenceRestored = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
global.settings.set_int('saved-session-presence', sessionStatus);
|
||||||
|
|
||||||
let [presence, s, msg] = this._accountMgr.get_most_available_presence();
|
let [presence, s, msg] = this._accountMgr.get_most_available_presence();
|
||||||
let newPresence, status;
|
let newPresence, status;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user