Ensure activity uniquness in the shell

This commit is contained in:
Marco Pesenti Gritti
2007-07-20 13:15:11 +02:00
parent ba3b8043f3
commit 19c8532d09
7 changed files with 75 additions and 26 deletions
+1
View File
@@ -248,6 +248,7 @@ class Activity(Window, gtk.Container):
self._jobject.metadata['title'] = _('%s Activity') % get_bundle_name()
self._jobject.metadata['title_set_by_user'] = '0'
self._jobject.metadata['activity'] = self.get_service_name()
self._jobject.metadata['activity_id'] = self.get_id()
self._jobject.metadata['keep'] = '0'
#self._jobject.metadata['buddies'] = ''
self._jobject.metadata['preview'] = ''
+25 -10
View File
@@ -90,24 +90,32 @@ class ActivityCreationHandler(gobject.GObject):
self._activity_handle = activity_handle
bus = dbus.SessionBus()
object_path = '/' + service_name.replace('.', '/')
proxy_obj = bus.get_object(service_name, object_path,
follow_name_owner_changes=True)
factory = dbus.Interface(proxy_obj, _ACTIVITY_FACTORY_INTERFACE)
factory.create(self._activity_handle.get_dict(),
reply_handler=self._no_reply_handler,
error_handler=self._create_error_handler)
bus = dbus.SessionBus()
bus_object = bus.get_object(_SHELL_SERVICE, _SHELL_PATH)
self._shell = dbus.Interface(bus_object, _SHELL_IFACE)
object_path = '/' + service_name.replace('.', '/')
proxy_obj = bus.get_object(service_name, object_path,
follow_name_owner_changes=True)
self._factory = dbus.Interface(proxy_obj, _ACTIVITY_FACTORY_INTERFACE)
if self.get_activity_id() != None:
self._shell.ActivateActivity(self.get_activity_id(),
reply_handler=self._activate_reply_handler,
error_handler=self._activate_error_handler)
else:
self._launch_activity()
def _launch_activity(self):
self._shell.NotifyLaunch(
service_name, self.get_activity_id(),
self._service_name, self.get_activity_id(),
reply_handler=self._no_reply_handler,
error_handler=self._notify_launch_error_handler)
self._factory.create(self._activity_handle.get_dict(),
reply_handler=self._no_reply_handler,
error_handler=self._create_error_handler)
def get_activity_id(self):
"""Retrieve the unique identity for this activity"""
return self._activity_handle.activity_id
@@ -121,6 +129,13 @@ class ActivityCreationHandler(gobject.GObject):
def _notify_launch_error_handler(self, err):
logging.debug('Notify launch failed %s' % err)
def _activate_reply_handler(self, activated):
if not activated:
self._launch_activity()
def _activate_error_handler(self, err):
logging.debug("Activity activation request failed %s" % err)
def _create_reply_handler(self, xid):
logging.debug("Activity created %s (%s)." %
(self._activity_handle.activity_id, self._service_name))
+2 -2
View File
@@ -20,8 +20,8 @@ from sugar.presence import presenceservice
class ActivityHandle(object):
"""Data structure storing simple activity metadata"""
def __init__(
self, activity_id, pservice_id=None,
object_id=None,uri=None
self, activity_id=None, pservice_id=None,
object_id=None, uri=None
):
"""Initialise the handle from activity_id