--- 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