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();
     },
 
openSUSE Build Service is sponsored by