---
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
[email protected]
http://lists.laptop.org/listinfo/sugar