Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@member.fsf.org>2010-07-12 11:09:51 (GMT)
committer Aleksey Lim <alsroot@member.fsf.org>2010-07-12 11:09:51 (GMT)
commitad88527353efdb351caef4999c17fdf1f1766662 (patch)
treeadf113ce9c5662560b3056a5371f3f9962ad6975
parent4851201a39c425717721e4dd05f65406b6d3e4ba (diff)
Use only one entry point for activity launch #1814
-rw-r--r--src/jarabe/desktop/activitieslist.py9
-rw-r--r--src/jarabe/desktop/favoritesview.py11
-rw-r--r--src/jarabe/desktop/meshbox.py16
-rw-r--r--src/jarabe/frame/activitiestray.py22
-rw-r--r--src/jarabe/journal/misc.py44
-rw-r--r--src/jarabe/view/palettes.py14
6 files changed, 40 insertions, 76 deletions
diff --git a/src/jarabe/desktop/activitieslist.py b/src/jarabe/desktop/activitieslist.py
index 87f2af0..e14d0f7 100644
--- a/src/jarabe/desktop/activitieslist.py
+++ b/src/jarabe/desktop/activitieslist.py
@@ -36,6 +36,7 @@ from sugar.activity.activityhandle import ActivityHandle
from jarabe.model import bundleregistry
from jarabe.view.palettes import ActivityPalette
from jarabe.view import launcher
+from jarabe.journal import misc
class ActivitiesTreeView(gtk.TreeView):
__gtype_name__ = 'SugarActivitiesTreeView'
@@ -143,13 +144,7 @@ class ActivitiesTreeView(gtk.TreeView):
registry = bundleregistry.get_registry()
bundle = registry.get_bundle(row[ListModel.COLUMN_BUNDLE_ID])
- activity_id = activityfactory.create_activity_id()
-
- client = gconf.client_get_default()
- xo_color = XoColor(client.get_string('/desktop/sugar/user/color'))
-
- launcher.add_launcher(activity_id, bundle.get_icon(), xo_color)
- activityfactory.create(bundle, ActivityHandle(activity_id))
+ misc.launch(bundle)
def set_filter(self, query):
self._query = query.lower()
diff --git a/src/jarabe/desktop/favoritesview.py b/src/jarabe/desktop/favoritesview.py
index aca945a..fad25dd 100644
--- a/src/jarabe/desktop/favoritesview.py
+++ b/src/jarabe/desktop/favoritesview.py
@@ -484,16 +484,7 @@ class ActivityIcon(CanvasIcon):
if self._resume_mode and self._journal_entries:
self._resume(self._journal_entries[0])
else:
- client = gconf.client_get_default()
- xo_color = XoColor(client.get_string('/desktop/sugar/user/color'))
-
- activity_id = activityfactory.create_activity_id()
- launcher.add_launcher(activity_id,
- self._activity_info.get_icon(),
- xo_color)
-
- handle = ActivityHandle(activity_id)
- activityfactory.create(self._activity_info, handle)
+ misc.launch(self._activity_info)
def get_bundle_id(self):
return self._activity_info.get_bundle_id()
diff --git a/src/jarabe/desktop/meshbox.py b/src/jarabe/desktop/meshbox.py
index eabc737..e5ef720 100644
--- a/src/jarabe/desktop/meshbox.py
+++ b/src/jarabe/desktop/meshbox.py
@@ -47,12 +47,12 @@ from jarabe.desktop.spreadlayout import SpreadLayout
from jarabe.desktop import keydialog
from jarabe.model import bundleregistry
from jarabe.model import network
-from jarabe.model import shell
from jarabe.model.network import Settings
from jarabe.model.network import IP4Config
from jarabe.model.network import WirelessSecurity
from jarabe.model.network import AccessPoint
from jarabe.model.olpcmesh import OlpcMeshManager
+from jarabe.journal import misc
_NM_SERVICE = 'org.freedesktop.NetworkManager'
_NM_IFACE = 'org.freedesktop.NetworkManager'
@@ -656,21 +656,11 @@ class ActivityView(hippo.CanvasBox):
icon.destroy()
def _clicked_cb(self, item):
- shell_model = shell.get_model()
- activity = shell_model.get_activity_by_id(self._model.get_id())
- if activity:
- activity.get_window().activate(gtk.get_current_event_time())
- return
-
bundle_id = self._model.get_bundle_id()
bundle = bundleregistry.get_registry().get_bundle(bundle_id)
- launcher.add_launcher(self._model.get_id(),
- bundle.get_icon(),
- self._model.get_color())
-
- handle = ActivityHandle(self._model.get_id())
- activityfactory.create(bundle, handle)
+ misc.launch(bundle, activity_id=self._model.get_id(),
+ color=self._model.get_color())
def set_filter(self, query):
text_to_check = self._model.activity.props.name.lower() + \
diff --git a/src/jarabe/frame/activitiestray.py b/src/jarabe/frame/activitiestray.py
index 3a80ac0..16c417d 100644
--- a/src/jarabe/frame/activitiestray.py
+++ b/src/jarabe/frame/activitiestray.py
@@ -49,6 +49,7 @@ from jarabe.view.pulsingicon import PulsingIcon
from jarabe.view import launcher
from jarabe.frame.frameinvoker import FrameWidgetInvoker
from jarabe.frame.notification import NotificationIcon
+from jarabe.journal import misc
import jarabe.frame
@@ -172,22 +173,10 @@ class ActivityInviteButton(BaseInviteButton):
def _launch(self):
"""Join the activity in the invite."""
-
- shell_model = shell.get_model()
- activity = shell_model.get_activity_by_id(self._activity_model.get_id())
- if activity:
- activity.get_window().activate(gtk.get_current_event_time())
- return
-
registry = bundleregistry.get_registry()
bundle = registry.get_bundle(self._bundle_id)
- launcher.add_launcher(self._activity_model.get_id(),
- bundle.get_icon(),
- self._activity_model.get_color())
-
- handle = ActivityHandle(self._activity_model.get_id())
- activityfactory.create(bundle, handle)
+ misc.launch(bundle, color=self._activity_model.get_color())
class PrivateInviteButton(BaseInviteButton):
"""Invite to a private one to one channel"""
@@ -231,7 +220,7 @@ class PrivateInviteButton(BaseInviteButton):
def _launch(self):
"""Start the activity with private channel."""
- activityfactory.create_with_uri(self._bundle, self._private_channel)
+ misc.launch(self._bundle, uri=self._private_channel)
class BaseInvitePalette(Palette):
"""Palette for frame or notification icon for invites."""
@@ -280,8 +269,7 @@ class ActivityInvitePalette(BaseInvitePalette):
self.set_primary_text(self._bundle_id)
def _join(self):
- handle = ActivityHandle(self._activity_model.get_id())
- activityfactory.create(self._bundle, handle)
+ misc.launch(self._bundle, activity_id=self._activity_model.get_id())
def _decline(self):
invites = owner.get_model().get_invites()
@@ -306,7 +294,7 @@ class PrivateInvitePalette(BaseInvitePalette):
self.set_primary_text(self._bundle_id)
def _join(self):
- activityfactory.create_with_uri(self._bundle, self._private_channel)
+ misc.launch(self._bundle, uri=self._private_channel)
invites = owner.get_model().get_invites()
invites.remove_private_channel(self._private_channel)
diff --git a/src/jarabe/journal/misc.py b/src/jarabe/journal/misc.py
index 24ad216..f5e2c89 100644
--- a/src/jarabe/journal/misc.py
+++ b/src/jarabe/journal/misc.py
@@ -168,7 +168,7 @@ def resume(metadata, bundle_id=None):
bundle.get_bundle_id())
installed_bundle = registry.get_bundle(bundle.get_bundle_id())
if installed_bundle:
- activityfactory.create(installed_bundle)
+ launch(installed_bundle)
else:
logging.error('Bundle %r is not installed.',
bundle.get_bundle_id())
@@ -192,17 +192,10 @@ def resume(metadata, bundle_id=None):
logging.debug('activityfactory.creating with uri %s', uri)
activity_bundle = registry.get_bundle(activities[0].get_bundle_id())
- activityfactory.create_with_uri(activity_bundle, bundle.get_start_uri())
+ launch(activity_bundle, uri=uri)
else:
activity_id = metadata.get('activity_id', '')
- if activity_id:
- shell_model = shell.get_model()
- activity = shell_model.get_activity_by_id(activity_id)
- if activity:
- activity.get_window().activate(gtk.get_current_event_time())
- return
-
if bundle_id is None:
activities = get_activities(metadata)
if not activities:
@@ -219,14 +212,31 @@ def resume(metadata, bundle_id=None):
else:
object_id = model.copy(metadata, '/')
- if activity_id:
- launcher.add_launcher(activity_id, bundle.get_icon(),
- get_icon_color(metadata))
- handle = ActivityHandle(object_id=object_id,
- activity_id=activity_id)
- activityfactory.create(bundle, handle)
- else:
- activityfactory.create_with_object_id(bundle, object_id)
+ launch(bundle, activity_id=activity_id, object_id=object_id,
+ color=get_icon_color(metadata))
+
+def launch(bundle, activity_id=None, object_id=None, uri=None, color=None):
+ if activity_id is None:
+ activity_id = activityfactory.create_activity_id()
+
+ logging.debug('launch bundle_id=%s activity_id=%s object_id=%s uri=%s',
+ bundle.get_bundle_id(), activity_id, object_id, uri)
+
+ shell_model = shell.get_model()
+ activity = shell_model.get_activity_by_id(activity_id)
+ if activity is not None:
+ logging.debug('re-launch %r', activity.get_window())
+ activity.get_window().activate(gtk.get_current_event_time())
+ return
+
+ if color is None:
+ client = gconf.client_get_default()
+ color = XoColor(client.get_string('/desktop/sugar/user/color'))
+
+ launcher.add_launcher(activity_id, bundle.get_icon(), color)
+ activity_handle = ActivityHandle(activity_id=activity_id,
+ object_id=object_id, uri=uri)
+ activityfactory.create(bundle, activity_handle)
def is_activity_bundle(metadata):
mime_type = metadata.get('mime_type', '')
diff --git a/src/jarabe/view/palettes.py b/src/jarabe/view/palettes.py
index ad84f08..43612d4 100644
--- a/src/jarabe/view/palettes.py
+++ b/src/jarabe/view/palettes.py
@@ -32,8 +32,8 @@ from sugar.activity import activityfactory
from sugar.activity.activityhandle import ActivityHandle
from jarabe.model import shell
-from jarabe.view import launcher
from jarabe.view.viewsource import setup_view_source
+from jarabe.journal import misc
class BasePalette(Palette):
def __init__(self, home_activity):
@@ -145,17 +145,7 @@ class ActivityPalette(Palette):
def __start_activate_cb(self, menu_item):
self.popdown(immediate=True)
-
- client = gconf.client_get_default()
- xo_color = XoColor(client.get_string('/desktop/sugar/user/color'))
-
- activity_id = activityfactory.create_activity_id()
- launcher.add_launcher(activity_id,
- self._activity_info.get_icon(),
- xo_color)
-
- handle = ActivityHandle(activity_id)
- activityfactory.create(self._activity_info, handle)
+ misc.launch(self._activity_info)
class JournalPalette(BasePalette):
def __init__(self, home_activity):