Index: gnome-about.in
===================================================================
--- gnome-about.in	(revision 5075)
+++ gnome-about.in	(working copy)
@@ -339,6 +339,7 @@
 
     rewind_text       = ""
     last_label_height = 0
+    label_height = 0
 
     def rewind_animate (self):
         '''Animation function for the rewind step'''
@@ -346,8 +347,8 @@
         if self.state == -2:
             self.item = self.rewind_text
             self.make_label ()
-            label_height = self.label.size_request ()[1]
-            total_height = self.height + label_height
+            self.label_height = self.label.size_request ()[1]
+            total_height = self.height + self.label_height
             self.pos = float (self.last_label_height) / total_height
             self.current.set (0.5, self.pos, 0, 0)
             self.state = 0
@@ -367,6 +368,9 @@
     def animate (self):
         '''The actual animation function'''
         self.source = None
+        self.height = self.size_request ()[1]
+        if self.label:
+            self.label_height = self.label.size_request ()[1]
         if self.state == -2:
             self.rewind_animate ()
         elif self.state == -1:
@@ -377,9 +381,8 @@
             if self.pos:
                 '''Move towards the top position'''
                 self.pos = max (0, self.pos - 0.02)
-                label_height = self.label.size_request ()[1]
-                total_height = self.height + label_height
-                real_pos = float (self.pos * self.height + label_height) \
+                total_height = self.height + self.label_height
+                real_pos = float (self.pos * self.height + self.label_height) \
                             / total_height
                 self.current.set (0.5, real_pos, 0, 0)
                 self.source = gobject.timeout_add (5, self.animate)
@@ -394,20 +397,25 @@
                 self.state = 2
             self.source = gobject.timeout_add (5, self.animate)
         elif self.state == 2:
-            if not self.next:
+            if self.pos:
+                '''Move out of the visible region of the Layout'''
+                if self.height < self.label_height:
+                    self.pos = max (0, self.pos - 0.002)
+                else:
+                    self.pos = max (0, self.pos - 0.02)
+                total_height = self.height + self.label_height
+                real_pos = float (self.pos * self.label_height) \
+                            / total_height
+                self.current.set (0.5, real_pos, 0, 0)
+                if self.height < self.label_height:
+                    self.source = gobject.timeout_add (15, self.animate)
+                else:
+                    self.source = gobject.timeout_add (5, self.animate)
+            elif not self.next:
                 self.state = -2
-                self.last_label_height = self.label.size_request ()[1]
+                self.last_label_height = self.label_height
                 self.reset_animation ()
                 self.source = gobject.timeout_add (1, self.animate)
-            elif self.pos:
-                '''Move out of the visible region of the Layout'''
-                self.pos = max (0, self.pos - 0.02)
-                label_height = self.label.size_request ()[1]
-                total_height = self.height + label_height
-                real_pos = float (self.pos * label_height) \
-                            / total_height
-                self.current.set (0.5, real_pos, 0, 0)
-                self.source = gobject.timeout_add (5, self.animate)
             else:
                 '''Label has disappeared, bye bye'''
                 self.reset_animation ()
@@ -420,11 +428,11 @@
             return
         self.label.set_size_request (self.width, -1)
         self.current = gtk.Alignment (0.0, 1.0)
-        label_height = self.label.size_request ()[1]
-        height = self.size_request ()[1]
-        self.current.set_size_request (-1, 2 * label_height + height)
+        self.label_height = self.label.size_request ()[1]
+        self.height = self.size_request ()[1]
+        self.current.set_size_request (-1, 2 * self.label_height + self.height)
         self.current.add (self.label)
-        self.put (self.current, 0, - label_height)
+        self.put (self.current, 0, - self.label_height)
         self.pos = 1.0
         self.show_all ()
 
