From 46d2cc268e3e9a1badd58ec3c06a2e37993828c9 Mon Sep 17 00:00:00 2001 From: Tomeu Vizoso Date: Wed, 04 Feb 2009 18:52:47 +0000 Subject: show launcher screen as soon as possible. #243 So the user has inmediate feedback. --- (limited to 'src') diff --git a/src/jarabe/desktop/activitieslist.py b/src/jarabe/desktop/activitieslist.py index a6d17b3..5d6f900 100644 --- a/src/jarabe/desktop/activitieslist.py +++ b/src/jarabe/desktop/activitieslist.py @@ -26,9 +26,11 @@ from sugar.graphics import style from sugar.graphics.icon import CanvasIcon from sugar.graphics.xocolor import XoColor from sugar.activity import activityfactory +from sugar.activity.activityhandle import ActivityHandle from jarabe.model import bundleregistry from jarabe.view.palettes import ActivityPalette +from jarabe.view import launcher class ActivitiesList(gtk.VBox): __gtype_name__ = 'SugarActivitiesList' @@ -257,7 +259,16 @@ class ActivityEntry(hippo.CanvasBox, hippo.CanvasItem): self._favorite_icon.props.favorite = self._favorite def __icon_button_release_event_cb(self, icon, event): - activityfactory.create(self._bundle) + 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, + self._bundle.get_icon(), + xo_color) + + activityfactory.create(self._bundle, ActivityHandle(activity_id)) def get_bundle_id(self): return self._bundle_id diff --git a/src/jarabe/desktop/favoritesview.py b/src/jarabe/desktop/favoritesview.py index 6de290b..9535edf 100644 --- a/src/jarabe/desktop/favoritesview.py +++ b/src/jarabe/desktop/favoritesview.py @@ -30,12 +30,14 @@ from sugar.graphics.menuitem import MenuItem from sugar.graphics.alert import Alert from sugar.graphics.xocolor import XoColor from sugar.activity import activityfactory +from sugar.activity.activityhandle import ActivityHandle from sugar.presence import presenceservice from sugar import dispatch from jarabe.view.palettes import JournalPalette from jarabe.view.palettes import CurrentActivityPalette, ActivityPalette from jarabe.view.buddymenu import BuddyMenu +from jarabe.view import launcher from jarabe.model.buddy import BuddyModel from jarabe.model import shell from jarabe.model import bundleregistry @@ -530,9 +532,22 @@ class ActivityIcon(CanvasIcon): def __button_release_event_cb(self, icon, event): self.palette.popdown(immediate=True) if get_settings().resume_mode and self._journal_entries: - journal.misc.resume(self._journal_entries[0]) + entry = self._journal_entries[0] + launcher.add_launcher(entry['activity_id'], + self._activity_info.get_icon(), + XoColor(entry.get('icon-color', ''))) + journal.misc.resume(entry) else: - activityfactory.create(self._activity_info) + 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) 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 24f55e1..eb6cc80 100644 --- a/src/jarabe/desktop/meshbox.py +++ b/src/jarabe/desktop/meshbox.py @@ -38,6 +38,7 @@ from sugar.util import unique_id from jarabe.model import neighborhood from jarabe.view.buddyicon import BuddyIcon from jarabe.view.pulsingicon import CanvasPulsingIcon +from jarabe.view import launcher from jarabe.desktop.snowflakelayout import SnowflakeLayout from jarabe.desktop.spreadlayout import SpreadLayout from jarabe.desktop import keydialog @@ -471,6 +472,11 @@ class ActivityView(hippo.CanvasBox): handle = ActivityHandle(self._model.get_id()) bundle = bundleregistry.get_registry().get_bundle(bundle_id) + + launcher.add_launcher(self._model.get_id(), + bundle.get_icon(), + self._model.get_color()) + activityfactory.create(bundle, handle) def set_filter(self, query): diff --git a/src/jarabe/frame/activitiestray.py b/src/jarabe/frame/activitiestray.py index 3a64bf0..5a5febe 100644 --- a/src/jarabe/frame/activitiestray.py +++ b/src/jarabe/frame/activitiestray.py @@ -43,6 +43,7 @@ from jarabe.model import bundleregistry from jarabe.model import filetransfer from jarabe.view.palettes import JournalPalette, CurrentActivityPalette from jarabe.view.pulsingicon import PulsingIcon +from jarabe.view import launcher from jarabe.frame.frameinvoker import FrameWidgetInvoker from jarabe.frame.notification import NotificationIcon import jarabe.frame @@ -166,6 +167,10 @@ class ActivityInviteButton(BaseInviteButton): 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) diff --git a/src/jarabe/view/launcher.py b/src/jarabe/view/launcher.py index cc9e2a7..fde7f78 100644 --- a/src/jarabe/view/launcher.py +++ b/src/jarabe/view/launcher.py @@ -29,12 +29,12 @@ from jarabe.model import shell from jarabe.view.pulsingicon import CanvasPulsingIcon class LaunchWindow(hippo.CanvasWindow): - def __init__(self, home_activity): + def __init__(self, activity_id, icon_path, icon_color): gobject.GObject.__init__( self, type_hint=gtk.gdk.WINDOW_TYPE_HINT_NORMAL) - self._activity_id = home_activity.get_activity_id() - self._box = LaunchBox(home_activity) + self._activity_id = activity_id + self._box = LaunchBox(activity_id, icon_path, icon_color) self.set_root(self._box) self.connect('realize', self.__realize_cb) @@ -60,14 +60,13 @@ class LaunchWindow(hippo.CanvasWindow): self._update_size() class LaunchBox(hippo.CanvasBox): - def __init__(self, home_activity): + def __init__(self, activity_id, icon_path, icon_color): gobject.GObject.__init__(self, orientation=hippo.ORIENTATION_VERTICAL, background_color=style.COLOR_WHITE.get_int()) - self._home_activity = home_activity - self._activity_icon = CanvasPulsingIcon( - file_name=home_activity.get_icon_path(), - pulse_color=home_activity.get_icon_color()) + self._activity_id = activity_id + self._activity_icon = CanvasPulsingIcon(file_name=icon_path, + pulse_color=icon_color) self.append(self._activity_icon, hippo.PACK_EXPAND) # FIXME support non-xo colors in CanvasPulsingIcon @@ -98,7 +97,7 @@ class LaunchBox(hippo.CanvasBox): self._activity_icon.props.pulsing = True def __active_activity_changed_cb(self, model, activity): - if activity == self._home_activity: + if activity.get_activity_id() == self._activity_id: self._activity_icon.props.paused = False else: self._activity_icon.props.paused = True @@ -123,22 +122,25 @@ def setup(): model.connect('launch-failed', __launch_failed_cb) model.connect('launch-completed', __launch_completed_cb) -def __launch_started_cb(home_model, home_activity): - if home_activity.is_journal(): +def add_launcher(activity_id, icon_path, icon_color): + + if activity_id in _launchers: return - launch_window = LaunchWindow(home_activity) + launch_window = LaunchWindow(activity_id, icon_path, icon_color) launch_window.show() - _launchers[home_activity.get_activity_id()] = launch_window + _launchers[activity_id] = launch_window + +def __launch_started_cb(home_model, home_activity): + add_launcher(home_activity.get_activity_id(), home_activity.get_icon_path(), + home_activity.get_icon_color()) def __launch_failed_cb(home_model, home_activity): - if not home_activity.is_journal(): - _destroy_launcher(home_activity) + _destroy_launcher(home_activity) def __launch_completed_cb(home_model, home_activity): - if not home_activity.is_journal(): - _destroy_launcher(home_activity) + _destroy_launcher(home_activity) def _destroy_launcher(home_activity): activity_id = home_activity.get_activity_id() diff --git a/src/jarabe/view/palettes.py b/src/jarabe/view/palettes.py index bc542ba..fb9e56e 100644 --- a/src/jarabe/view/palettes.py +++ b/src/jarabe/view/palettes.py @@ -30,8 +30,10 @@ from sugar.graphics.icon import Icon from sugar.graphics import style from sugar.graphics.xocolor import XoColor from sugar.activity import activityfactory +from sugar.activity.activityhandle import ActivityHandle from jarabe.model import bundleregistry +from jarabe.view import launcher class BasePalette(Palette): def __init__(self, home_activity): @@ -153,7 +155,18 @@ class ActivityPalette(Palette): self._favorite_icon.props.xo_color = xo_color def __start_activate_cb(self, menu_item): - activityfactory.create(self._bundle) + 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._bundle.get_icon(), + xo_color) + + handle = ActivityHandle(activity_id) + activityfactory.create(self._bundle, handle) def __change_favorite_activate_cb(self, menu_item): registry = bundleregistry.get_registry() -- cgit v0.9.1