From 42cb44be8bd4db8fafc1288773d4d421514198d7 Mon Sep 17 00:00:00 2001
From: Tomeu Vizoso <[EMAIL PROTECTED]>
Date: Sun, 6 Apr 2008 19:31:01 +0200
Subject: [PATCH] Identify bundles also by their version number.

---
 service/activityregistryservice.py |    6 +-
 service/bundleregistry.py          |   93 +++++++++++++++++-------------------
 service/clipboardobject.py         |   14 -----
 service/clipboardservice.py        |   26 +++++-----
 service/main.py                    |    3 +-
 src/model/MeshModel.py             |    3 +-
 src/model/homemodel.py             |    7 ++-
 src/view/Shell.py                  |   26 ++++++----
 src/view/clipboardicon.py          |   31 ++++--------
 src/view/clipboardmenu.py          |   36 +++++---------
 src/view/frame/activitiestray.py   |    3 +-
 src/view/home/FriendView.py        |    3 +-
 src/view/home/activitieslist.py    |   10 ++--
 src/view/home/activitiesring.py    |    6 ++-
 14 files changed, 120 insertions(+), 147 deletions(-)

diff --git a/service/activityregistryservice.py b/service/activityregistryservice.py
index 9ead767..3b3b15c 100644
--- a/service/activityregistryservice.py
+++ b/service/activityregistryservice.py
@@ -70,10 +70,10 @@ class ActivityRegistry(dbus.service.Object):
         return result
 
     @dbus.service.method(_ACTIVITY_REGISTRY_IFACE,
-                         in_signature='s', out_signature='a{sv}')
-    def GetActivity(self, bundle_id):
+                         in_signature='si', out_signature='a{sv}')
+    def GetActivity(self, bundle_id, version):
         registry = bundleregistry.get_registry()
-        bundle = registry.get_bundle(bundle_id)
+        bundle = registry.get_bundle(bundle_id, version)
         if not bundle:
             return {}
         
diff --git a/service/bundleregistry.py b/service/bundleregistry.py
index 9cf81cc..eede197 100644
--- a/service/bundleregistry.py
+++ b/service/bundleregistry.py
@@ -62,8 +62,8 @@ class BundleRegistry(gobject.GObject):
 
     def __init__(self):
         gobject.GObject.__init__(self)
-        
-        self._bundles = []
+
+        self._bundles = {}
         self._search_path = []
         self._mime_defaults = _load_mime_defaults()
 
@@ -71,19 +71,26 @@ class BundleRegistry(gobject.GObject):
         if os.path.exists(path):
             try:
                 self._favorite_bundles = simplejson.load(open(path))
-                print 'loaded %r' % self._favorite_bundles 
             except ValueError, e:
                 logging.error('Error while loading favorite_activities: %r.' % e)
                 self._favorite_bundles = []
         else:
             self._favorite_bundles = []
 
-    def get_bundle(self, bundle_id):
-        """Returns an bundle given his service name"""
-        for bundle in self._bundles:
-            if bundle.get_bundle_id() == bundle_id:
-                return bundle
-        return None
+    def get_bundle(self, bundle_id, version):
+        """Returns an bundle given its id and version number.
+        If version is negative, return the bundle with the highest version."""
+        if version < 0:
+            newest_bundle = None
+            for bundle in self._bundles.itervalues():
+                if bundle.get_bundle_id() != bundle_id:
+                    continue
+                if newest_bundle is None or bundle.get_activity_version() > \
+                        newest_bundle.get_activity_version():
+                    newest_bundle = bundle
+            return newest_bundle
+        else:
+            return self._bundles.get((bundle_id, version), None)
 
     def add_search_path(self, path):
         """Add a directory to the bundles search path"""
@@ -91,46 +98,38 @@ class BundleRegistry(gobject.GObject):
         self._scan_directory(path)
     
     def __iter__(self):
-        return self._bundles.__iter__()
+        return self._bundles.itervalues().__iter__()
 
     def _scan_directory(self, path):
-        if not os.path.isdir(path):
-            return
-
-        # Sort by mtime to ensure a stable activity order
-        bundles = {}
-        for f in os.listdir(path):
-            if not f.endswith('.activity'):
-                continue
-            try:
-                bundle_dir = os.path.join(path, f)
-                if os.path.isdir(bundle_dir):
-                    bundles[bundle_dir] = os.stat(bundle_dir).st_mtime
-            except Exception, e:
-                logging.error('Error while processing installed activity ' \
-                              'bundle: %s, %s, %s' % (f, e.__class__, e))
-
-        bundle_dirs = bundles.keys()
-        bundle_dirs.sort(lambda d1,d2: cmp(bundles[d1], bundles[d2]))
-        for dir in bundle_dirs:
-            try:
-                self.add_bundle(dir)
-            except Exception, e:
-                logging.error('Error while processing installed activity ' \
-                              'bundle: %s, %s, %s' % (dir, e.__class__, e))
-
+        try:
+            for f in os.listdir(path):
+                if not f.endswith('.activity'):
+                    continue
+                try:
+                    bundle_dir = os.path.join(path, f)
+                    if os.path.isdir(bundle_dir):
+                        self.add_bundle(bundle_dir)
+                except Exception, e:
+                    logging.error('Error while processing installed activity ' \
+                                  'bundle: %s, %s, %s' % (f, e.__class__, e))
+        except Exception, e:
+            logging.error('Error while processing activity directory: ' \
+                            '%s, %s, %s' % (path, e.__class__, e))
+        
     def add_bundle(self, bundle_path):
         try:
             bundle = ActivityBundle(bundle_path)
         except MalformedBundleException:
             return False
 
-        self._bundles.append(bundle)
-        self.emit('bundle-added', bundle)
+        bundle_key = (bundle.get_bundle_id(), bundle.get_activity_version())
+        if bundle_key not in self._bundles:
+            self._bundles[bundle_key] = bundle
+            self.emit('bundle-added', bundle)
         return True
 
     def remove_bundle(self, bundle_path):
-        for bundle in self._bundles:
+        for bundle in self._bundles.itervalues():
             if bundle.get_path() == bundle_path:
                 self._bundles.remove(bundle)
                 self.emit('bundle-removed', bundle)
@@ -139,7 +138,7 @@ class BundleRegistry(gobject.GObject):
 
     def get_activities_for_type(self, mime_type):
         result = []
-        for bundle in self._bundles:
+        for bundle in self._bundles.itervalues():
             if bundle.get_mime_types() and mime_type in bundle.get_mime_types():
                 if self.get_default_for_type(mime_type) == bundle.get_bundle_id():
                     result.insert(0, bundle)
@@ -153,16 +152,11 @@ class BundleRegistry(gobject.GObject):
         else:
             return None
 
-    def _find_bundle(self, bundle_id, version):
-        for bundle in self._bundles:
-            if bundle.get_bundle_id() == bundle_id and \
-                    bundle.get_activity_version() == version:
-                return bundle
-        raise ValueError('No bundle %r with version %r exists.' % \
-                (bundle_id, version))
-
     def set_bundle_favorite(self, bundle_id, version, favorite):
-        bundle = self._find_bundle(bundle_id, version)
+        bundle = self._bundles.get((bundle_id, version), None)
+        if bundle is None:
+            raise ValueError('No bundle %r with version %r exists.' % \
+                    (bundle_id, version))
         if favorite and not [bundle_id, version] in self._favorite_bundles:
             self._favorite_bundles.append([bundle_id, version])
             self.emit('bundle-changed', bundle)
@@ -186,6 +180,7 @@ _bundle_registry = BundleRegistry()
 
 for path in _get_data_dirs():
     bundles_path = os.path.join(path, 'activities')
-    _bundle_registry.add_search_path(bundles_path)
+    if os.path.isdir(bundles_path):
+        _bundle_registry.add_search_path(bundles_path)
 
 _bundle_registry.add_search_path(env.get_user_activities_path())
diff --git a/service/clipboardobject.py b/service/clipboardobject.py
index 70c21a0..542e9a2 100644
--- a/service/clipboardobject.py
+++ b/service/clipboardobject.py
@@ -20,8 +20,6 @@ import urlparse
 
 from sugar import mime
 
-import bundleregistry
-
 class ClipboardObject:
 
     def __init__(self, object_path, name):
@@ -53,18 +51,6 @@ class ClipboardObject:
         #return self._get_type_info().get_preview()
         return ''
 
-    def get_activities(self):
-        mime = self.get_mime_type()
-        if not mime:
-            return ''
-
-        registry = bundleregistry.get_registry()
-        activities = registry.get_activities_for_type(self.get_mime_type())
-        if activities:
-            return [activity.get_bundle_id() for activity in activities]
-        else:
-            return ''
-
     def get_percent(self):
         return self._percent
 
diff --git a/service/clipboardservice.py b/service/clipboardservice.py
index d69fbaf..e41b09f 100644
--- a/service/clipboardservice.py
+++ b/service/clipboardservice.py
@@ -33,8 +33,8 @@ NAME_KEY = 'NAME'
 PERCENT_KEY = 'PERCENT'
 ICON_KEY = 'ICON'
 PREVIEW_KEY = 'PREVIEW'
-ACTIVITIES_KEY = 'ACTIVITIES'
 FORMATS_KEY = 'FORMATS'
+MIME_TYPE_KEY = 'MIME_TYPE'
 
 TYPE_KEY = 'TYPE'
 DATA_KEY = 'DATA'
@@ -88,10 +88,10 @@ class ClipboardService(dbus.service.Object):
             logging.debug('Added in-memory format of type ' + format_type + '.')
                         
         self.object_state_changed(object_path, {NAME_KEY: cb_object.get_name(),
-                                  PERCENT_KEY: cb_object.get_percent(),
-                                  ICON_KEY: cb_object.get_icon(),
-                                  PREVIEW_KEY: cb_object.get_preview(),
-                                  ACTIVITIES_KEY: cb_object.get_activities()})
+                PERCENT_KEY: cb_object.get_percent(),
+                ICON_KEY: cb_object.get_icon(),
+                PREVIEW_KEY: cb_object.get_preview(),
+                MIME_TYPE_KEY: cb_object.get_mime_type()})
 
     @dbus.service.method(_CLIPBOARD_DBUS_INTERFACE,
                          in_signature="o", out_signature="")
@@ -136,10 +136,10 @@ class ClipboardService(dbus.service.Object):
                                            on_disk=False)
 
         self.object_state_changed(object_path, {NAME_KEY: cb_object.get_name(),
-                                    PERCENT_KEY: percent,
-                                    ICON_KEY: cb_object.get_icon(),
-                                    PREVIEW_KEY: cb_object.get_preview(),
-                                    ACTIVITIES_KEY: cb_object.get_activities()})
+                PERCENT_KEY: percent,
+                ICON_KEY: cb_object.get_icon(),
+                PREVIEW_KEY: cb_object.get_preview(),
+                MIME_TYPE_KEY: cb_object.get_mime_type()})
 
     @dbus.service.method(_CLIPBOARD_DBUS_INTERFACE,
                          in_signature="o", out_signature="a{sv}")
@@ -160,8 +160,8 @@ class ClipboardService(dbus.service.Object):
                 PERCENT_KEY: cb_object.get_percent(),
                 ICON_KEY: cb_object.get_icon(),
                 PREVIEW_KEY: cb_object.get_preview(),
-                ACTIVITIES_KEY: cb_object.get_activities(),
-                FORMATS_KEY: format_types}
+                FORMATS_KEY: format_types,
+                MIME_TYPE_KEY: cb_object.get_mime_type()}
         return dbus.Dictionary(result_dict)
 
     @dbus.service.method(_CLIPBOARD_DBUS_INTERFACE,
@@ -171,8 +171,8 @@ class ClipboardService(dbus.service.Object):
         cb_object = self._objects[str(object_path)]
         format = cb_object.get_formats()[format_type]
         result_dict = {TYPE_KEY: format.get_type(),
-                DATA_KEY: dbus.ByteArray(format.get_data()),
-                ON_DISK_KEY: format.is_on_disk()}
+                       DATA_KEY: dbus.ByteArray(format.get_data()),
+                       ON_DISK_KEY: format.is_on_disk()}
         return dbus.Dictionary(result_dict)
 
     # dbus signals
diff --git a/service/main.py b/service/main.py
index 679cc09..7ac0295 100755
--- a/service/main.py
+++ b/service/main.py
@@ -25,11 +25,12 @@ import dbus.glib
 from sugar import logger
 from sugar import env
 
+logger.start('shellservice')
+
 import activityregistryservice
 import clipboardservice
 
 def main():
-	logger.start('shellservice')
 	logging.info('Starting shell service.')
 
 	gobject.threads_init()
diff --git a/src/model/MeshModel.py b/src/model/MeshModel.py
index da5b3c2..e26a391 100644
--- a/src/model/MeshModel.py
+++ b/src/model/MeshModel.py
@@ -200,7 +200,8 @@ class MeshModel(gobject.GObject):
 
     def _check_activity(self, presence_activity):
         registry = activity.get_registry()
-        bundle = registry.get_activity(presence_activity.props.type)
+        # TODO: the PS should give us the version of this bundle
+        bundle = registry.get_activity(presence_activity.props.type, -1)
         if not bundle:
             return
         if self.has_activity(presence_activity.props.id):
diff --git a/src/model/homemodel.py b/src/model/homemodel.py
index 8de989c..05e42ca 100644
--- a/src/model/homemodel.py
+++ b/src/model/homemodel.py
@@ -167,7 +167,9 @@ class HomeModel(gobject.GObject):
             service_name = wm.get_bundle_id(window)
             if service_name:
                 registry = activity.get_registry()
-                activity_info = registry.get_activity(service_name)
+                # TODO: We need to get the version of the bundle associated to
+                # this window.
+                activity_info = registry.get_activity(service_name, -1)
             else:
                 activity_info = None
 
@@ -255,7 +257,8 @@ class HomeModel(gobject.GObject):
 
     def notify_activity_launch(self, activity_id, service_name):
         registry = activity.get_registry()
-        activity_info = registry.get_activity(service_name)
+        # TODO: We need to get the version of the bundle being launched.
+        activity_info = registry.get_activity(service_name, -1)
         if not activity_info:
             raise ValueError("Activity service name '%s' was not found in the bundle registry." % service_name)
         home_activity = HomeActivity(activity_info, activity_id)
diff --git a/src/view/Shell.py b/src/view/Shell.py
index cafbf60..1a41cea 100644
--- a/src/view/Shell.py
+++ b/src/view/Shell.py
@@ -89,11 +89,12 @@ class Shell(gobject.GObject):
             datastore.mount(ds_path, [], timeout=120 * \
                                          DBUS_PYTHON_TIMEOUT_UNITS_PER_SECOND)
 
-        # Checking for the bundle existence will also ensure
-        # that the shell service is started up.
+        # Retrieving the activity info for the journal will also ensure that the
+        # shell service is started up.
         registry = activity.get_registry()
-        if registry.get_activity('org.laptop.JournalActivity'):
-            self.start_activity('org.laptop.JournalActivity')
+        activity_info = registry.get_activity('org.laptop.JournalActivity', -1)
+        if activity_info is not None:
+            self.start_activity(activity_info.bundle_id, activity_info.version)
 
     def _activity_started_cb(self, home_model, home_activity):
         activity_host = ActivityHost(home_activity)
@@ -141,14 +142,17 @@ class Shell(gobject.GObject):
         # Get the service name for this activity, if
         # we have a bundle on the system capable of handling
         # this activity type
+        # TODO: we need to know the version of the activity that we are joining.
         registry = activity.get_registry()
-        bundle = registry.get_activity(bundle_id)
-        if not bundle:
+        # check for the existence of any version with this bundle id
+        bundle = registry.get_activity(bundle_id, -1)
+        if bundle is None:
+            # TODO: if we don't have the bundle yet, download it.
             logging.error("Couldn't find activity for type %s" % bundle_id)
             return
 
         handle = ActivityHandle(activity_id)
-        activityfactory.create(bundle_id, handle)
+        activityfactory.create(bundle_id, bundle.version, handle)
 
     def notify_launch(self, bundle_id, activity_id):
         # Zoom to Home for launch feedback
@@ -161,13 +165,13 @@ class Shell(gobject.GObject):
         home_model = self._model.get_home()
         home_model.notify_activity_launch_failed(activity_id)
 
-    def start_activity(self, activity_type):
-        if activity_type in self._activities_starting:
+    def start_activity(self, bundle_id, version):
+        if bundle_id in self._activities_starting:
             logging.debug("This activity is still launching.")
             return
 
-        self._activities_starting.add(activity_type)
-        activityfactory.create(activity_type)
+        self._activities_starting.add(bundle_id)
+        activityfactory.create(bundle_id, version)
 
     def take_activity_screenshot(self):
         if self._model.get_zoom_level() != shellmodel.ShellModel.ZOOM_ACTIVITY:
diff --git a/src/view/clipboardicon.py b/src/view/clipboardicon.py
index 4b36395..fa95665 100644
--- a/src/view/clipboardicon.py
+++ b/src/view/clipboardicon.py
@@ -39,10 +39,7 @@ class ClipboardIcon(RadioToolButton):
     def __init__(self, object_id, name, group):
         RadioToolButton.__init__(self, group=group)
         self._object_id = object_id
-        self._name = name
         self._percent = 0
-        self._preview = None
-        self._activity = None
         self.owns_clipboard = False
         self.props.sensitive = False
         self.props.active = False
@@ -56,18 +53,16 @@ class ClipboardIcon(RadioToolButton):
         cb_service.connect('object-state-changed', self._object_state_changed_cb)
         obj = cb_service.get_object(self._object_id)
 
-        self.palette = ClipboardMenu(self._object_id, self._name, self._percent,
-                                     self._preview, self._activity,
-                                     self._is_bundle(obj['FORMATS']))
+        self.palette = ClipboardMenu(self._object_id, name,
+                                     self._is_bundle(obj['MIME_TYPE']))
         self.palette.props.invoker = FrameWidgetInvoker(self)
         
         self.child.connect('drag_data_get', self._drag_data_get_cb)
         self.connect('notify::active', self._notify_active_cb)
 
-    def _is_bundle(self, formats):
-        # A bundle will have only one format.
-        return formats and formats[0] in [ActivityBundle.MIME_TYPE,
-                                          ActivityBundle.DEPRECATED_MIME_TYPE]
+    def _is_bundle(self, mime_type):
+        return mime_type in [ActivityBundle.MIME_TYPE,
+                             ActivityBundle.DEPRECATED_MIME_TYPE]
 
     def get_object_id(self):
         return self._object_id
@@ -112,29 +107,23 @@ class ClipboardIcon(RadioToolButton):
         self.owns_clipboard = False
 
     def _object_state_changed_cb(self, cb_service, object_id, name, percent,
-                                 icon_name, preview, activity):
+                                 icon_name, preview, mime_type):
 
         if object_id != self._object_id:
             return
 
-        cb_service = clipboardservice.get_instance()
-        obj = cb_service.get_object(self._object_id)
-
         if icon_name:
             self._icon.props.icon_name = icon_name
         else:
             self._icon.props.icon_name = 'application-octet-stream'
 
         self.child.drag_source_set(gtk.gdk.BUTTON1_MASK,
-                                         self._get_targets(),
-                                         gtk.gdk.ACTION_COPY)
+                                   self._get_targets(),
+                                   gtk.gdk.ACTION_COPY)
         self.child.drag_source_set_icon_name(self._icon.props.icon_name)
         
-        self._name = name
-        self._preview = preview
-        self._activity = activity
-        self.palette.set_state(name, percent, preview, activity,
-                               self._is_bundle(obj['FORMATS']))
+        self.palette.set_state(name, percent, preview, mime_type,
+                               self._is_bundle(mime_type))
 
         old_percent = self._percent
         self._percent = percent
diff --git a/src/view/clipboardmenu.py b/src/view/clipboardmenu.py
index 7df2ee0..6469341 100644
--- a/src/view/clipboardmenu.py
+++ b/src/view/clipboardmenu.py
@@ -35,27 +35,17 @@ from sugar import activity
 
 class ClipboardMenu(Palette):
     
-    def __init__(self, object_id, name, percent, preview, activities, installable):
+    def __init__(self, object_id, name, installable):
         Palette.__init__(self, name)
 
         self._object_id = object_id
-        self._percent = percent
-        self._activities = activities
+        self._percent = 0
+        self._activities = []
 
         self.set_group_id('frame')
 
         self._progress_bar = None
 
-        """
-        if preview:
-            self._preview_text = hippo.CanvasText(text=preview,
-                    size_mode=hippo.CANVAS_SIZE_WRAP_WORD)
-            self._preview_text.props.color = color.LABEL_TEXT.get_int()
-            self._preview_text.props.font_desc = \
-                style.FONT_NORMAL.get_pango_desc()
-            self.append(self._preview_text)
-        """
-
         self._remove_item = MenuItem(_('Remove'), 'list-remove')
         self._remove_item.connect('activate', self._remove_item_activate_cb)
         self.menu.append(self._remove_item)
@@ -101,15 +91,10 @@ class ClipboardMenu(Palette):
             for item in submenu.get_children():
                 submenu.remove(item)
         
-        for service_name in self._activities:
-            registry = activity.get_registry()
-            activity_info = registry.get_activity(service_name)
-            
-            if not activity_info:
-                logging.warning('Activity %s is unknown.' % service_name)
-            
+        for activity_info in self._activities:
             item = gtk.MenuItem(activity_info.name)
-            item.connect('activate', self._open_submenu_item_activate_cb, service_name)
+            item.connect('activate', self._open_submenu_item_activate_cb,
+                         activity_info.bundle_id)
             submenu.append(item)
             item.show()
 
@@ -147,10 +132,13 @@ class ClipboardMenu(Palette):
             self._progress_bar.props.fraction = self._percent / 100.0
             self._progress_bar.props.text = '%.2f %%' % self._percent
 
-    def set_state(self, name, percent, preview, activities, installable):
+    def set_state(self, name, percent, preview, mime_type, installable):
         self.set_primary_text(name)
         self._percent = percent
-        self._activities = activities
+
+        registry = activity.get_registry()
+        self._activities = registry.get_activities_for_type(mime_type)
+
         self._update_progress_bar()
         self._update_items_visibility(installable)
         self._update_open_submenu()
@@ -160,7 +148,7 @@ class ClipboardMenu(Palette):
         if self._percent < 100 or menu_item.get_submenu() is not None:
             return
         jobject = self._copy_to_journal()
-        jobject.resume(self._activities[0])
+        jobject.resume(self._activities[0].bundle_id, self._activities[0].version)
         jobject.destroy()
 
     def _open_submenu_item_activate_cb(self, menu_item, service_name):
diff --git a/src/view/frame/activitiestray.py b/src/view/frame/activitiestray.py
index 4fbd5f6..ec91d9b 100644
--- a/src/view/frame/activitiestray.py
+++ b/src/view/frame/activitiestray.py
@@ -151,7 +151,8 @@ class InvitePalette(Palette):
         Palette.__init__(self, '')
 
         registry = activity.get_registry()
-        activity_info = registry.get_activity(activity_model.get_bundle_id())
+        # TODO: The PS should pass us the version number of the bundle.
+        activity_info = registry.get_activity(activity_model.get_bundle_id(), -1)
         if activity_info:
             self.set_primary_text(activity_info.name)
         else:
diff --git a/src/view/home/FriendView.py b/src/view/home/FriendView.py
index 6ef75ef..ca22446 100644
--- a/src/view/home/FriendView.py
+++ b/src/view/home/FriendView.py
@@ -48,7 +48,8 @@ class FriendView(hippo.CanvasBox):
 
     def _get_new_icon_name(self, ps_activity):
         registry = activity.get_registry()
-        activity_info = registry.get_activity(ps_activity.props.type)
+        # TODO: the PS should give us the version of this bundle
+        activity_info = registry.get_activity(ps_activity.props.type, -1)
         if activity_info:
             return activity_info.icon
         return None
diff --git a/src/view/home/activitieslist.py b/src/view/home/activitieslist.py
index afca51d..22f0a5f 100644
--- a/src/view/home/activitieslist.py
+++ b/src/view/home/activitieslist.py
@@ -37,17 +37,18 @@ class ActivitiesList(hippo.CanvasScrollbars):
         self.set_root(self._box)
 
         registry = activity.get_registry()
-        registry.get_activities_async(reply_handler=self._get_activities_cb)
+        registry.get_activities_async(reply_handler=self.__get_activities_cb)
         registry.connect('activity-added', self.__activity_added_cb)
         registry.connect('activity-removed', self.__activity_removed_cb)
 
-    def _get_activities_cb(self, activity_list):
+    def __get_activities_cb(self, activity_list):
         for info in activity_list:
             if info.bundle_id != 'org.laptop.JournalActivity':
                 self._add_activity(info)
 
     def __activity_added_cb(self, activity_registry, activity_info):
-        self._add_activity(activity_info)
+        if activity_info.bundle_id != 'org.laptop.JournalActivity':
+            self._add_activity(activity_info)
 
     def __activity_removed_cb(self, activity_registry, activity_info):
         for entry in self.get_children():
@@ -125,7 +126,8 @@ class ActivityEntry(hippo.CanvasBox, hippo.CanvasItem):
             self.icon.props.fill_color = style.COLOR_TRANSPARENT.get_svg()
 
     def __icon_button_release_event_cb(self, icon, event):
-        view.Shell.get_instance().start_activity(self._activity_info.bundle_id)
+        view.Shell.get_instance().start_activity(self._activity_info.bundle_id,
+                                                 self._activity_info.version)
 
     def get_bundle_id(self):
         return self._activity_info.bundle_id
diff --git a/src/view/home/activitiesring.py b/src/view/home/activitiesring.py
index 52d3427..ace4e32 100644
--- a/src/view/home/activitiesring.py
+++ b/src/view/home/activitiesring.py
@@ -142,7 +142,8 @@ class ActivityIcon(CanvasIcon):
             self.props.fill_color = style.COLOR_TRANSPARENT.get_svg()
 
     def __button_release_event_cb(self, icon, event):
-        view.Shell.get_instance().start_activity(self._activity_info.bundle_id)
+        view.Shell.get_instance().start_activity(self._activity_info.bundle_id,
+                                                 self._activity_info.version)
 
     def get_bundle_id(self):
         return self._activity_info.bundle_id
@@ -177,7 +178,8 @@ class ActivityPalette(Palette):
         """
 
     def __start_activate_cb(self, menu_item):
-        view.Shell.get_instance().start_activity(self._activity_info.bundle_id)
+        view.Shell.get_instance().start_activity(self._activity_info.bundle_id,
+                                                 self._activity_info.version)
 
 class CurrentActivityIcon(CanvasIcon, hippo.CanvasItem):
     def __init__(self):
-- 
1.5.2.5

_______________________________________________
Sugar mailing list
[email protected]
http://lists.laptop.org/listinfo/sugar

Reply via email to