Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <marco@localhost.localdomain>2007-07-11 09:45:43 (GMT)
committer Marco Pesenti Gritti <marco@localhost.localdomain>2007-07-11 09:45:43 (GMT)
commitd2059c1baa92c44b2d97005340a0b975dffb44d9 (patch)
treef1cf88f70b052364d1cab874494666bde48907cc /shell
parent9dab5fffafa4f3b266a515aff34321676cea3150 (diff)
parentbb71cd61cff6a577e3ccd3179f38bbc71a567b0f (diff)
Merge branch 'master' of git+ssh://dev.laptop.org/git/sugar
Diffstat (limited to 'shell')
-rw-r--r--shell/view/clipboardmenu.py70
1 files changed, 32 insertions, 38 deletions
diff --git a/shell/view/clipboardmenu.py b/shell/view/clipboardmenu.py
index cd154d9..2eff3f0 100644
--- a/shell/view/clipboardmenu.py
+++ b/shell/view/clipboardmenu.py
@@ -27,8 +27,6 @@ from sugar.graphics.palette import Palette
from sugar.graphics.canvasicon import CanvasIcon
from sugar.graphics import color
from sugar.graphics import style
-from sugar.activity import activityfactory
-from sugar.activity.bundle import Bundle
from sugar.clipboard import clipboardservice
from sugar.datastore import datastore
from sugar.objects import mime
@@ -118,44 +116,43 @@ class ClipboardMenu(Palette):
if self._percent < 100:
return
- # Get the file path
- cb_service = clipboardservice.get_instance()
- obj = cb_service.get_object(self._object_id)
- formats = obj['FORMATS']
- if len(formats) == 0:
- logging.warning('ClipboardMenu._open_item_activate_cb: Object without data.')
- return
-
- if not self._activity and \
- not formats[0] == 'application/vnd.olpc-x-sugar':
- logging.warning('ClipboardMenu._open_item_activate_cb: Object without activity.')
- return
-
- uri = cb_service.get_object_data(self._object_id, formats[0])['DATA']
- if not uri.startswith('file://'):
- return
-
- (scheme, netloc, path, params, query, fragment) = urlparse.urlparse(uri)
-
- # FIXME: would be better to check for format.onDisk
- try:
- path_exists = os.path.exists(path)
- except TypeError:
- path_exists = False
-
- if path_exists:
- if self._activity:
- activityfactory.create_with_uri(self._activity, uri)
- else:
- self._install_xo(path)
+ jobject = self._copy_to_journal()
+ # TODO: we cannot simply call resume() right now because we would lock
+ # the shell as we are sharing the same loop as the shell service.
+ #jobject.resume()
+
+ # TODO: take this out when we fix the mess that is the shell/shellservice.
+ from shell.model import bundleregistry
+ from sugar.activity.bundle import Bundle
+ from sugar.activity import activityfactory
+ if jobject.is_bundle():
+ bundle = Bundle(jobject.file_path)
+ if not bundle.is_installed():
+ bundle.install()
+
+ activityfactory.create(bundle.get_service_name())
else:
- logging.debug("Clipboard item file path %s didn't exist" % path)
+ service_name = None
+ if jobject.metadata.has_key('activity') and jobject.metadata['activity']:
+ service_name = self.metadata['activity']
+ elif jobject.metadata.has_key('mime_type') and jobject.metadata['mime_type']:
+ mime_type = jobject.metadata['mime_type']
+ for bundle in bundleregistry.get_registry():
+ if bundle.get_mime_types() and mime_type in bundle.get_mime_types():
+ service_name = bundle.get_service_name()
+ break
+ if service_name:
+ activityfactory.create_with_object_id(service_name,
+ jobject.object_id)
def _remove_item_activate_cb(self, menu_item):
cb_service = clipboardservice.get_instance()
cb_service.delete_object(self._object_id)
def _journal_item_activate_cb(self, menu_item):
+ self._copy_to_journal()
+
+ def _copy_to_journal(self):
cb_service = clipboardservice.get_instance()
obj = cb_service.get_object(self._object_id)
@@ -185,9 +182,6 @@ class ClipboardMenu(Palette):
jobject.metadata['mime_type'] = mime_type
jobject.file_path = file_path
datastore.write(jobject)
-
- def _install_xo(self, path):
- bundle = Bundle(path)
- if not bundle.is_installed():
- bundle.install()
+
+ return jobject