From eb47a36701560fe5a6e712f8196701f8ac7bc346 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Fri, 16 Jun 2006 17:01:03 -0400 Subject: [PATCH] Add a gobject helper which proxies signals for the ActivityContainer --- sugar/shell/shell.py | 41 +++++++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/sugar/shell/shell.py b/sugar/shell/shell.py index b7d9f608..d9973c8c 100755 --- a/sugar/shell/shell.py +++ b/sugar/shell/shell.py @@ -6,6 +6,7 @@ import pygtk pygtk.require('2.0') import gtk import pango +import gobject import sugar.util from sugar.shell.PresenceWindow import PresenceWindow @@ -223,6 +224,27 @@ class ActivityHost(dbus.service.Object): self.tab_close_button.set_size_request (w + 5, h + 2) self.update_tab_size() +class ActivityContainerSignalHelper(gobject.GObject): + """A gobject whose sole purpose is to distribute signals for + an ActivityContainer object.""" + + __gsignals__ = { + 'local-activity-started': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT])), + 'local-activity-ended': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT])) + } + + def __init__(self, parent): + gobject.GObject.__init__(self) + self._parent = parent + + def activity_started(self, activity_id): + self.emit('local-activity-started', self._parent, activity_id) + + def activity_ended(self, activity_id): + self.emit('local-activity-ended', self._parent, activity_id) + class ActivityContainer(dbus.service.Object): def __init__(self, service, bus): @@ -231,6 +253,8 @@ class ActivityContainer(dbus.service.Object): self.bus = bus self.service = service + self._signal_helper = ActivityContainerSignalHelper(self) + dbus.service.Object.__init__(self, self.service, "/com/redhat/Sugar/Shell/ActivityContainer") bus.add_signal_receiver(self.name_owner_changed, dbus_interface = "org.freedesktop.DBus", signal_name = "NameOwnerChanged") @@ -243,9 +267,9 @@ class ActivityContainer(dbus.service.Object): self.notebook = gtk.Notebook() tab_label = gtk.Label("Everyone") - tab_page = StartPage() - self.notebook.append_page(tab_page, tab_label) - tab_page.show() + self._start_page = StartPage(self._signal_helper) + self.notebook.append_page(self._start_page, tab_label) + self._start_page.show() self.notebook.show() self.notebook.connect("switch-page", self.notebook_tab_changed) @@ -328,6 +352,8 @@ class ActivityContainer(dbus.service.Object): #print "in name_owner_changed: svc=%s oldsvc=%s newsvc=%s"%(service_name, old_service_name, new_service_name) for owner, activity in self.activities[:]: if owner == old_service_name: + activity_id = activity.get_host_activity_id() + self._signal_helper.activity_ended(activity_id) self.activities.remove((owner, activity)) #self.__print_activities() @@ -341,10 +367,11 @@ class ActivityContainer(dbus.service.Object): activity = ActivityHost(self, activity_name) self.activities.append((sender, activity)) - self.current_activity = activity + activity_id = activity.get_host_activity_id() + self._signal_helper.activity_started(activity_id) - #self.__print_activities() - return activity.get_host_activity_id() + self.current_activity = activity + return activity_id @dbus.service.method("com.redhat.Sugar.Shell.ActivityContainer", \ in_signature="ss", \ @@ -352,6 +379,8 @@ class ActivityContainer(dbus.service.Object): def add_activity_with_id(self, activity_name, activity_id, sender): activity = ActivityHost(self, activity_name, activity_id) self.activities.append((sender, activity)) + activity_id = activity.get_host_activity_id() + self._signal_helper.activity_started(activity_id) self.current_activity = activity def __print_activities(self):