Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar
diff options
context:
space:
mode:
authorDan Williams <dcbw@localhost.localdomain>2007-01-07 05:04:30 (GMT)
committer Dan Williams <dcbw@localhost.localdomain>2007-01-07 05:04:30 (GMT)
commitfb716ae0466547ea4e6c580b9d55fe015139201f (patch)
tree34269bea5a1bee422bea58b947906b8d40c5b6f2 /sugar
parent8cea4c5fc6de37dd47843af014c4730f04f4dc1d (diff)
Make activity launching asynchronous
The ActivityFactory create() method now returns a handler GObject, which callers may attach signals to to receive success and error signals from the result of the activity launch request.
Diffstat (limited to 'sugar')
-rw-r--r--sugar/activity/ActivityFactory.py45
1 files changed, 32 insertions, 13 deletions
diff --git a/sugar/activity/ActivityFactory.py b/sugar/activity/ActivityFactory.py
index 481c5b9..94e765e 100644
--- a/sugar/activity/ActivityFactory.py
+++ b/sugar/activity/ActivityFactory.py
@@ -76,24 +76,43 @@ class ActivityFactory(dbus.service.Object):
if len(self._activities) == 0:
gtk.main_quit()
-def create(activity_name):
- """Create a new activity from his name."""
- bus = dbus.SessionBus()
+class ActivityCreationHandler(gobject.GObject):
+
+ __gsignals__ = {
+ 'error': (gobject.SIGNAL_RUN_FIRST,
+ gobject.TYPE_NONE,
+ ([gobject.TYPE_PYOBJECT])),
+ 'success': (gobject.SIGNAL_RUN_FIRST,
+ gobject.TYPE_NONE,
+ ([gobject.TYPE_PYOBJECT]))
+ }
- factory_name = activity_name
- factory_path = get_path(factory_name)
+ def __init__(self, activity_name):
+ gobject.GObject.__init__(self)
- proxy_obj = bus.get_object(factory_name, factory_path)
- factory = dbus.Interface(proxy_obj, "com.redhat.Sugar.ActivityFactory")
+ bus = dbus.SessionBus()
+ factory_name = activity_name
+ factory_path = get_path(factory_name)
- xid = factory.create()
+ proxy_obj = bus.get_object(factory_name, factory_path)
+ factory = dbus.Interface(proxy_obj, "com.redhat.Sugar.ActivityFactory")
- bus = dbus.SessionBus()
- proxy_obj = bus.get_object(Activity.get_service_name(xid),
- Activity.get_object_path(xid))
- activity = dbus.Interface(proxy_obj, Activity.ACTIVITY_INTERFACE)
+ factory.create(reply_handler=self._reply_handler, error_handler=self._error_handler)
- return activity
+ def _reply_handler(self, xid):
+ bus = dbus.SessionBus()
+ proxy_obj = bus.get_object(Activity.get_service_name(xid),
+ Activity.get_object_path(xid))
+ activity = dbus.Interface(proxy_obj, Activity.ACTIVITY_INTERFACE)
+ self.emit('success', activity)
+
+ def _error_handler(self, err):
+ logging.debug("Couldn't create activity: %s" % err)
+ self.emit('error', err)
+
+def create(activity_name):
+ """Create a new activity from its name."""
+ return ActivityCreationHandler(activity_name)
def start_factory(activity_class, bundle_path):
"""Start the activity factory."""