File gnome-shell-prompt-twice.patch of Package gnome-shell.1083

diff -Npur gnome-shell-3.10.4/js/gdm/loginDialog.js gnome-shell-3.10.4-new/js/gdm/loginDialog.js
--- gnome-shell-3.10.4/js/gdm/loginDialog.js	2014-04-30 08:30:11.883063332 +0800
+++ gnome-shell-3.10.4-new/js/gdm/loginDialog.js	2014-04-30 08:45:39.231044301 +0800
@@ -518,6 +518,11 @@ const LoginDialog = new Lang.Class({
 
         this._disableUserList = undefined;
         this._userListLoaded = false;
+        this._nextSignalId = 0;
+
+        this._realmManager = new Realmd.Manager();
+        this._realmSignalId = this._realmManager.connect('login-format-changed',
+                                             Lang.bind(this, this._showRealmLoginHint));
 
         // If the user list is enabled, it should take key focus; make sure the
         // screen shield is initialized first to prevent it from stealing the
@@ -663,14 +668,14 @@ const LoginDialog = new Lang.Class({
     //FIXME: if we realmManager did not work, use ower own one
         this._authPrompt.setMessage(_("(e.g., domain\\user)"), GdmUtil.MessageType.HINT);
 
-        let realmManager = new Realmd.Manager();
-        let realmSignalId = realmManager.connect('login-format-changed',
-                                                 Lang.bind(this, this._showRealmLoginHint));
-        this._showRealmLoginHint(realmManager.loginFormat);
+        this._showRealmLoginHint(this._realmManager.loginFormat);
 
-        let nextSignalId = this._authPrompt.connect('next',
+        if (this._nextSignalId)
+                this._authPrompt.disconnect(this._nextSignalId);
+        this._nextSignalId = this._authPrompt.connect('next',
                                                     Lang.bind(this, function() {
-                                                        this._authPrompt.disconnect(nextSignalId);
+                                                        this._authPrompt.disconnect(this._nextSignalId);
+                                                        this._nextSignalId = 0;
                                                         this._authPrompt.updateSensitivity(false);
                                                         let answer = this._authPrompt.getAnswer();
                                                         this._user = this._userManager.get_user(answer);
@@ -678,9 +683,6 @@ const LoginDialog = new Lang.Class({
                                                         this._authPrompt.startSpinning();
                                                         this._authPrompt.begin({ userName: answer });
                                                         this._updateCancelButton();
-
-                                                        realmManager.disconnect(realmSignalId)
-                                                        realmManager.release();
                                                     }));
         this._updateCancelButton();
         this._showPrompt();
@@ -693,25 +695,22 @@ const LoginDialog = new Lang.Class({
         //FIXME: I sugguest to add this info for customer to contact their account manager
         this._authPrompt.setMessage(this._domainMenuButton.getHintMessage(), GdmUtil.MessageType.HINT);
 
-        let realmManager = new Realmd.Manager();
-        let realmSignalId = realmManager.connect('login-format-changed',
-                                                 Lang.bind(this, this._showRealmLoginHint));
-        this._showRealmLoginHint(realmManager.loginFormat);
+        this._showRealmLoginHint(this._realmManager.loginFormat);
 
-        let nextSignalId = this._authPrompt.connect('next',
+        if (this._nextSignalId)
+                this._authPrompt.disconnect(this._nextSignalId);
+        this._nextSignalId = this._authPrompt.connect('next',
                                                     Lang.bind(this, function() {
-                                                        this._authPrompt.disconnect(nextSignalId);
+                                                        this._authPrompt.disconnect(this._nextSignalId);
+                                                        this._nextSignalId = 0;
                                                         this._authPrompt.updateSensitivity(false);
                                                         let answer = this._authPrompt.getAnswer();
-                            let domain_answer = this._domainMenuButton.getDomainUser(answer);
+                                                        let domain_answer = this._domainMenuButton.getDomainUser(answer);
                                                         this._user = this._userManager.get_user(domain_answer);
                                                         this._authPrompt.clear();
                                                         this._authPrompt.startSpinning();
                                                         this._authPrompt.begin({ userName: domain_answer});
                                                         this._updateCancelButton();
-
-                                                        realmManager.disconnect(realmSignalId)
-                                                        realmManager.release();
                                                     }));
         this._updateCancelButton();
         this._showPrompt();
@@ -941,6 +940,11 @@ const LoginDialog = new Lang.Class({
             this._userManager.disconnect(this._userManagerLoadedId);
             this._userManagerLoadedId = 0;
         }
+        if (this._realmManager) {
+            this._realmManager.disconnect(this._realmSignalId);
+            this._realmSignalId = 0;
+            this._realmManager.release();
+        }
     },
 
     _loadUserList: function() {
openSUSE Build Service is sponsored by