From b2265d692e1f39b7cac553e4dd8c3dbb16b6a76f Mon Sep 17 00:00:00 2001
From: Aleksey Lim <alsroot@member.fsf.org>
Date: Fri, 4 Sep 2009 10:05:16 +0000
Subject: Wrong calculated positions for palettes #1268

---
 src/sugar/graphics/palette.py       |    4 ++++
 src/sugar/graphics/palettewindow.py |   13 +++++++------
 2 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/src/sugar/graphics/palette.py b/src/sugar/graphics/palette.py
index f58e7ac..2ea2376 100644
--- a/src/sugar/graphics/palette.py
+++ b/src/sugar/graphics/palette.py
@@ -195,6 +195,10 @@ class Palette(PaletteWindow):
 
         self._secondary_anim.start()
 
+    def on_popdown(self):
+        # to suppress glitches while later re-opening
+        self.set_palette_state(self.PRIMARY)
+
     def on_enter(self, event):
         PaletteWindow.on_enter(self, event)
         self._secondary_anim.start()
diff --git a/src/sugar/graphics/palettewindow.py b/src/sugar/graphics/palettewindow.py
index 454ac8d..aa5b416 100644
--- a/src/sugar/graphics/palettewindow.py
+++ b/src/sugar/graphics/palettewindow.py
@@ -333,9 +333,13 @@ class PaletteWindow(gtk.Window):
         if not immediate:
             self._popdown_anim.start()
         else:
-            self._popdown_anim.stop()
+            self.on_popdown()
+            self.size_request()
             self.hide()
 
+    def on_popdown(self):
+        self._popdown_anim.stop()
+
     def on_invoker_enter(self):
         self._mouse_detector.start()
 
@@ -414,10 +418,7 @@ class _PopupAnimation(animator.Animation):
 
     def next_frame(self, current):
         if current == 1.0:
-            self._palette.show()
-            # we have to invoke update_position() twice
-            # since WM could ignore first move() request
-            self._palette.update_position()
+            self._palette.popup(immediate=True)
 
 
 class _PopdownAnimation(animator.Animation):
@@ -428,7 +429,7 @@ class _PopdownAnimation(animator.Animation):
 
     def next_frame(self, current):
         if current == 1.0:
-            self._palette.hide()
+            self._palette.popdown(immediate=True)
 
 
 class Invoker(gobject.GObject):
-- 
1.6.3.3

