---
 src/view/frame/activitiestray.py |   58 +++++++++++++++++++++++++++++++++++++-
 src/view/frame/frame.py          |    2 +-
 2 files changed, 58 insertions(+), 2 deletions(-)
diff --git a/src/view/frame/activitiestray.py b/src/view/frame/activitiestray.py
index 020cb68..8955ac8 100644
--- a/src/view/frame/activitiestray.py
+++ b/src/view/frame/activitiestray.py
@@ -16,6 +16,7 @@
 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
 import logging
+import gobject
 from gettext import gettext as _
 import gtk
 
@@ -182,17 +183,22 @@ class InvitePalette(Palette):
                 return
 
 class ActivitiesTray(HTray):
-    def __init__(self):
+    def __init__(self, frame):
         HTray.__init__(self)
 
+        self._frame = frame
         self._buttons = {}
         self._invite_to_item = {}
+        self._tabbing_activity = None
 
         self._home_model = shellmodel.get_instance().get_home()
         self._home_model.connect('activity-added', self.__activity_added_cb)
         self._home_model.connect('activity-removed', self.__activity_removed_cb)
         self._home_model.connect('pending-activity-changed',
                                  self.__activity_changed_cb)
+        self._home_model.connect('tabbing-activity-changed',
+                                 self.__tabbing_activity_changed_cb)
+        self._frame.connect('notify::unobscured', self.__frame_notify_unobscured_cb)
 
         self._invites = shellmodel.get_instance().get_invites()
         for invite in self._invites:
@@ -200,6 +206,18 @@ class ActivitiesTray(HTray):
         self._invites.connect('invite-added', self.__invite_added_cb)
         self._invites.connect('invite-removed', self.__invite_removed_cb)
 
+    def __update_tabbing_palette_position(self, *args):
+        if self._tabbing_activity and self._frame.props.unobscured:
+            button = self._buttons[self._tabbing_activity.get_activity_id()]
+            palette = button.get_palette()
+            if palette:
+                # FIXME: This should probably go into the invoker code.
+                # This needs to be done because the button may have moved.
+                palette._update_position()
+                palette.queue_draw()
+                button.queue_draw()
+        return False
+
     def __activity_added_cb(self, home_model, home_activity):
         logging.debug('__activity_added_cb: %r' % home_activity)
         if self.get_children():
@@ -212,6 +230,8 @@ class ActivitiesTray(HTray):
         self._buttons[home_activity.get_activity_id()] = button
         button.connect('clicked', self.__activity_clicked_cb, home_activity)
         button.show()
+        
+        gobject.idle_add(self.__update_tabbing_palette_position)
 
     def __activity_removed_cb(self, home_model, home_activity):
         logging.debug('__activity_removed_cb: %r' % home_activity)
@@ -219,10 +239,29 @@ class ActivitiesTray(HTray):
         self.remove_item(button)
         del self._buttons[home_activity.get_activity_id()]
 
+        gobject.idle_add(self.__update_tabbing_palette_position)
+
     def __activity_changed_cb(self, home_model, home_activity):
         logging.debug('__activity_changed_cb: %r' % home_activity)
         button = self._buttons[home_activity.get_activity_id()]
         button.props.active = True
+        
+    def __tabbing_activity_changed_cb(self, home_model, tabbing_activity):
+        logging.debug('__tabbing_activity_changed_cb: %r' % tabbing_activity)
+
+        if self._tabbing_activity:
+            button = self._buttons[self._tabbing_activity.get_activity_id()]
+            palette = button.get_palette()
+            if palette:
+                palette.popdown(True)
+
+        self._tabbing_activity = tabbing_activity
+        # popup may only happen here if the frame is shown completely
+        if self._frame.props.unobscured and self._tabbing_activity:
+            button = self._buttons[self._tabbing_activity.get_activity_id()]
+            palette = button.get_palette()
+            if palette:
+                palette.popup(True)
 
     def __activity_clicked_cb(self, button, home_activity):
         if button.props.active:
@@ -238,6 +277,23 @@ class ActivitiesTray(HTray):
     def __invite_removed_cb(self, invites, invite):
         self._remove_invite(invite)
 
+    def __frame_notify_unobscured_cb(self, *args):
+        logging.debug('ActivitiesTray.__frame_notify_unobscured_cb')
+
+        if not self._tabbing_activity:
+            return
+
+        button = self._buttons[self._tabbing_activity.get_activity_id()]
+        palette = button.get_palette()
+        if not palette:
+            return
+
+        if self._frame.props.unobscured:
+            palette.popup(True)
+            self._popup_palette = None
+        else:
+            palette.popdown(True)
+
     def _add_invite(self, invite):
         mesh = shellmodel.get_instance().get_mesh()
         activity_model = mesh.get_activity(invite.get_activity_id())
diff --git a/src/view/frame/frame.py b/src/view/frame/frame.py
index 9e5af71..6939944 100644
--- a/src/view/frame/frame.py
+++ b/src/view/frame/frame.py
@@ -185,7 +185,7 @@ class Frame(gobject.GObject):
                 box_width=4*style.GRID_CELL_SIZE))
         zoom_toolbar.show()
 
-        activities_tray = ActivitiesTray()
+        activities_tray = ActivitiesTray(self)
         panel.append(hippo.CanvasWidget(widget=activities_tray),
                 hippo.PACK_EXPAND)
         activities_tray.show()
_______________________________________________
Sugar mailing list
Sugar@lists.laptop.org
http://lists.laptop.org/listinfo/sugar

Reply via email to