[gnome-shell] screenShield: defer deactivation until all messages are shown



commit ded99b9a09ccba059073ba6ec82ed3e58c6d810f
Author: Ray Strode <rstrode redhat com>
Date:   Thu Jul 18 08:58:58 2013 -0400

    screenShield: defer deactivation until all messages are shown
    
    Right now when a user types their password to unlock their session
    we end up getting an unlock signal from GDM right away.  We then
    proceed to deactivate the screensaver before the user has a chance
    to read his messages.
    
    This commit makes sure we clear out the message queue before processing
    the deactivation request.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=704347

 js/ui/screenShield.js |    6 ++++++
 js/ui/unlockDialog.js |   14 ++++++++++++++
 2 files changed, 20 insertions(+), 0 deletions(-)
---
diff --git a/js/ui/screenShield.js b/js/ui/screenShield.js
index d7bf461..8271aa0 100644
--- a/js/ui/screenShield.js
+++ b/js/ui/screenShield.js
@@ -1121,6 +1121,12 @@ const ScreenShield = new Lang.Class({
     },
 
     deactivate: function(animate) {
+        this._dialog.finish(Lang.bind(this, function() {
+            this._finishDeactivate(animate);
+        }));
+    },
+
+    _finishDeactivate: function(animate) {
         this._hideLockScreen(animate, 0);
 
         if (this._hasLockScreen)
diff --git a/js/ui/unlockDialog.js b/js/ui/unlockDialog.js
index e2646ea..75d1138 100644
--- a/js/ui/unlockDialog.js
+++ b/js/ui/unlockDialog.js
@@ -281,4 +281,18 @@ const UnlockDialog = new Lang.Class({
     addCharacter: function(unichar) {
         this._promptEntry.clutter_text.insert_unichar(unichar);
     },
+
+    finish: function(onComplete) {
+        if (!this._userVerifier.hasPendingMessages) {
+            onComplete();
+            return;
+        }
+
+        let signalId = this._userVerifier.connect('no-more-messages',
+                                                  Lang.bind(this, function() {
+                                                      this._userVerifier.disconnect(signalId);
+                                                      onComplete();
+                                                  }));
+
+    }
 });


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]