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