From ff2dd6cc0e55aeceaf63cde10f58db3cec18493d Mon Sep 17 00:00:00 2001
From: Aleksey Lim <alsroot@member.fsf.org>
Date: Wed, 9 Sep 2009 12:41:37 +0000
Subject: [PATCH] Stop all animators on poup/popdown invoking #1310

---
 src/sugar/graphics/palette.py       | 14 ++++++++++----
 src/sugar/graphics/palettewindow.py |  8 +++-----
 2 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/src/sugar/graphics/palette.py b/src/sugar/graphics/palette.py
index 2ea23765..f4b18c02 100644
--- a/src/sugar/graphics/palette.py
+++ b/src/sugar/graphics/palette.py
@@ -193,11 +193,17 @@ class Palette(PaletteWindow):
             state = self.PRIMARY
         self.set_palette_state(state)
 
-        self._secondary_anim.start()
+        if state == self.PRIMARY:
+            self._secondary_anim.start()
+        else:
+            self._secondary_anim.stop()
 
-    def on_popdown(self):
-        # to suppress glitches while later re-opening
-        self.set_palette_state(self.PRIMARY)
+    def popdown(self, immediate=False):
+        if immediate:
+            # to suppress glitches while later re-opening
+            self.set_palette_state(self.PRIMARY)
+        PaletteWindow.popdown(self, immediate)
+        self._secondary_anim.stop()
 
     def on_enter(self, event):
         PaletteWindow.on_enter(self, event)
diff --git a/src/sugar/graphics/palettewindow.py b/src/sugar/graphics/palettewindow.py
index 73c6ae7f..d08052fa 100644
--- a/src/sugar/graphics/palettewindow.py
+++ b/src/sugar/graphics/palettewindow.py
@@ -319,6 +319,7 @@ class PaletteWindow(gtk.Window):
         if not immediate:
             self._popup_anim.start()
         else:
+            self._popup_anim.stop()
             self.show()
             # we have to invoke update_position() twice
             # since WM could ignore first move() request
@@ -326,20 +327,17 @@ class PaletteWindow(gtk.Window):
 
     def popdown(self, immediate=False):
         logging.debug('PaletteWindow.popdown immediate %r', immediate)
-        self._popup_anim.stop()
 
+        self._popup_anim.stop()
         self._mouse_detector.stop()
 
         if not immediate:
             self._popdown_anim.start()
         else:
-            self.on_popdown()
+            self._popdown_anim.stop()
             self.size_request()
             self.hide()
 
-    def on_popdown(self):
-        self._popdown_anim.stop()
-
     def on_invoker_enter(self):
         self._mouse_detector.start()