[gnome-shell] loginDialog: fade out before starting session



commit 244121d920c0708cdbfbf9651d7a16f3d19bd24d
Author: Ray Strode <rstrode redhat com>
Date:   Wed Feb 6 15:18:22 2013 -0500

    loginDialog: fade out before starting session
    
    Right now we very abruptly kill the login screen
    and start the users session without any transition
    out.
    
    This commit introduces a fade out of the dialog and
    panels.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=694062

 js/gdm/loginDialog.js |   22 +++++++++++++++++++++-
 js/ui/screenShield.js |    9 +++++++++
 2 files changed, 30 insertions(+), 1 deletions(-)
---
diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js
index 9c30f9a..18b9692 100644
--- a/js/gdm/loginDialog.js
+++ b/js/gdm/loginDialog.js
@@ -44,6 +44,7 @@ const PanelMenu = imports.ui.panelMenu;
 const Tweener = imports.ui.tweener;
 const UserMenu = imports.ui.userMenu;
 
+const _FADE_ANIMATION_TIME = 0.25;
 const _SCROLL_ANIMATION_TIME = 0.5;
 const _TIMED_LOGIN_IDLE_THRESHOLD = 5.0;
 const _LOGO_ICON_HEIGHT = 16;
@@ -914,7 +915,26 @@ const LoginDialog = new Lang.Class({
     },
 
     _onSessionOpened: function(client, serviceName) {
-        this._greeter.call_start_session_when_ready_sync(serviceName, true, null);
+        Tweener.addTween(this.dialogLayout,
+                         { opacity: 0,
+                           time: _FADE_ANIMATION_TIME,
+                           transition: 'easeOutQuad',
+                           onUpdate: function() {
+                               let children = Main.layoutManager.uiGroup.get_children();
+
+                               for (let i = 0; i < children.length; i++) {
+                                   if (children[i] != Main.layoutManager.screenShieldGroup)
+                                       children[i].opacity = this.dialogLayout.opacity;
+                               }
+                           },
+                           onUpdateScope: this,
+                           onComplete: function() {
+                               Mainloop.idle_add(Lang.bind(this, function() {
+                                   this._greeter.call_start_session_when_ready_sync(serviceName, true, null);
+                                   return false;
+                               }));
+                           },
+                           onCompleteScope: this });
     },
 
     _waitForItemForUser: function(userName) {
diff --git a/js/ui/screenShield.js b/js/ui/screenShield.js
index 7e693be..a2f482a 100644
--- a/js/ui/screenShield.js
+++ b/js/ui/screenShield.js
@@ -50,9 +50,11 @@ const SUMMARY_ICON_SIZE = 48;
 // - MANUAL_FADE_TIME is used for lowering the shield when asked by the user,
 //   or when cancelling the dialog
 // - CURTAIN_SLIDE_TIME is used when raising the shield before unlocking
+// - INITIAL_FADE_IN_TIME is used for the initial fade in at startup
 const STANDARD_FADE_TIME = 10;
 const MANUAL_FADE_TIME = 0.8;
 const CURTAIN_SLIDE_TIME = 0.3;
+const INITIAL_FADE_IN_TIME = 0.25;
 
 function sample(offx, offy) {
     return 'texel += texture2D (sampler, tex_coord.st + pixel_step * ' +
@@ -511,9 +513,16 @@ const ScreenShield = new Lang.Class({
 
         this._lockDialogGroup = new St.Widget({ x_expand: true,
                                                 y_expand: true,
+                                                opacity: 0,
                                                 pivot_point: new Clutter.Point({ x: 0.5, y: 0.5 }),
                                                 name: 'lockDialogGroup' });
 
+        Tweener.addTween(this._lockDialogGroup,
+                         { opacity: 255,
+                           time: INITIAL_FADE_IN_TIME,
+                           transition: 'easeInQuad',
+                         });
+
         this.actor.add_actor(this._lockDialogGroup);
         this.actor.add_actor(this._lockScreenGroup);
 


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