File login-prompt-preserve-session-choice.patch of Package gnome-shell.160
Index: js/gdm/authPrompt.js
===================================================================
--- js/gdm/authPrompt.js.orig 2014-06-24 15:59:51.179905395 +0800
+++ js/gdm/authPrompt.js 2014-07-02 18:32:16.673524278 +0800
@@ -90,6 +90,9 @@ const AuthPrompt = new Lang.Class({
y_fill: true,
expand: true });
this._label = new St.Label({ style_class: 'login-dialog-prompt-label' });
+ // record the current user session choice, so it didn't get lost in
+ // verification failure. (bnc#870560)
+ this.activeSessionChoice = null;
this.actor.add(this._label,
{ expand: true,
@@ -412,6 +415,7 @@ const AuthPrompt = new Lang.Class({
this._message.opacity = 0;
this.setUser(null);
+ this.activeSessionChoice = null;
this.updateSensitivity(true);
this._entry.set_text('');
Index: js/gdm/loginDialog.js
===================================================================
--- js/gdm/loginDialog.js.orig 2014-07-02 15:17:29.837915386 +0800
+++ js/gdm/loginDialog.js 2014-07-02 18:34:15.214544398 +0800
@@ -317,6 +317,9 @@ const SessionMenuButton = new Lang.Class
this._menu.toggle();
}));
+ // whether a session is manually activated for session menu items
+ this._is_manually_activated = false;
+
this._items = {};
this._activeSessionId = null;
this._populate();
@@ -346,6 +349,11 @@ const SessionMenuButton = new Lang.Class
this._updateOrnament();
this.emit('session-activated', this._activeSessionId);
+
+ if ( this._is_manually_activated ){
+ this.emit('session-manually-activated', this._activeSessionId);
+ this._is_manually_activated = false;
+ }
},
close: function() {
@@ -373,6 +381,7 @@ const SessionMenuButton = new Lang.Class
this.setActiveSession(id);
item.connect('activate', Lang.bind(this, function() {
+ this._is_manually_activated = true;
this.setActiveSession(id);
}));
}
@@ -512,6 +521,13 @@ const LoginDialog = new Lang.Class({
Lang.bind(this, function(list, sessionId) {
this._greeter.call_select_session_sync (sessionId, null);
}));
+ this._sessionMenuButton.connect('session-manually-activated',
+ Lang.bind(this, function(list, sessionId){
+ if (this._shouldShowSessionMenuButton()){
+ this._authPrompt.activeSessionChoice = sessionId;
+ }
+ }));
+
this._sessionMenuButton.actor.opacity = 0;
this._sessionMenuButton.actor.show();
this._authPrompt.addActorToDefaultButtonWell(this._sessionMenuButton.actor);
@@ -619,6 +635,11 @@ const LoginDialog = new Lang.Class({
if (this._shouldShowSessionMenuButton())
this._authPrompt.setActorInDefaultButtonWell(this._sessionMenuButton.actor);
+
+ if (this._authPrompt.activeSessionChoice){
+ this._sessionMenuButton.setActiveSession(this._authPrompt.activeSessionChoice);
+ }
+
this._showPrompt();
},