[gnome-shell] Run the startup animation when we don't have much going on



commit 1950a67e15fbacca7708462ad3fe6369de713997
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Wed Feb 13 22:45:43 2013 -0500

    Run the startup animation when we don't have much going on
    
    Starting the startup animation when we don't have that much IO
    makes it a lot more visible.
    
    Based on a patch by Giovanni Campagna <gcampagna src gnome org>
    
    https://bugzilla.gnome.org/show_bug.cgi?id=682429

 js/ui/layout.js |    5 +++--
 js/ui/main.js   |   10 ++++++++++
 2 files changed, 13 insertions(+), 2 deletions(-)
---
diff --git a/js/ui/layout.js b/js/ui/layout.js
index 062cbdd..357a986 100644
--- a/js/ui/layout.js
+++ b/js/ui/layout.js
@@ -229,7 +229,6 @@ const LayoutManager = new Lang.Class({
         Main.overview.connect('showing', Lang.bind(this, this._overviewShowing));
         Main.overview.connect('hidden', Lang.bind(this, this._overviewHidden));
         Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated));
-        this._startupAnimation();
     },
 
     _overviewShowing: function() {
@@ -465,9 +464,11 @@ const LayoutManager = new Lang.Class({
         return this._keyboardIndex;
     },
 
-    _startupAnimation: function() {
+    prepareStartupAnimation: function() {
         this.panelBox.translation_y = -this.panelBox.height;
+    },
 
+    startupAnimation: function() {
         let plymouthTransitionRunning = false;
 
         // If we're the greeter, put up the xrootpmap actor
diff --git a/js/ui/main.js b/js/ui/main.js
index d7ba213..22edfb9 100644
--- a/js/ui/main.js
+++ b/js/ui/main.js
@@ -127,6 +127,7 @@ function startSession() {
 
     // Setup the stage hierarchy early
     layoutManager = new Layout.LayoutManager();
+
     // Various parts of the codebase still refers to Main.uiGroup
     // instead using the layoutManager.  This keeps that code
     // working until it's updated.
@@ -154,6 +155,7 @@ function startSession() {
     BackgroundMenu.addBackgroundMenu(global.background_actor);
 
     layoutManager.init();
+    layoutManager.prepareStartupAnimation();
     overview.init();
 
     global.screen.override_workspace_layout(Meta.ScreenCorner.TOPLEFT,
@@ -190,6 +192,14 @@ function startSession() {
 
     ExtensionDownloader.init();
     ExtensionSystem.init();
+
+    // Run the startup animation as soon as the mainloop is idle enough.
+    // This is necessary to have it smooth and without interruptions from
+    // completed IO tasks
+    GLib.idle_add(GLib.PRIORITY_LOW, function() {
+        layoutManager.startupAnimation();
+        return false;
+    });
 }
 
 let _workspaces = [];


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