diff --git a/services/clipboard/typeregistry.py b/services/clipboard/typeregistry.py index b6f4ae1f..88bdf607 100644 --- a/services/clipboard/typeregistry.py +++ b/services/clipboard/typeregistry.py @@ -1,5 +1,7 @@ import logging from gettext import gettext as _ +import urlparse +import posixpath class FileType: def __init__(self, formats): @@ -200,15 +202,33 @@ class OOTextFileType(FileType): class UriListFileType(FileType): _types = set(['text/uri-list']) - + + def _is_image(self): + uris = self._formats['text/uri-list'].get_data().split('\n') + if len(uris) == 1: + uri = urlparse.urlparse(uris[0]) + ext = posixpath.splitext(uri.path)[1] + logging.debug(ext) + # FIXME: Bad hack, the type registry should treat text/uri-list as a special case. + if ext in ['.jpg', '.jpeg', '.gif', '.png', '.svg']: + return True + + return False + def get_name(self): - return _('text/uri-list') + if self._is_image(): + return _('Image') + else: + return _('File') def get_icon(self): - return 'theme:stock-missing' + if self._is_image(): + return 'theme:object-image' + else: + return 'theme:stock-missing' def get_preview(self): - return 'preview' + return '' def get_activity(self): return '' diff --git a/shell/view/frame/clipboardbox.py b/shell/view/frame/clipboardbox.py index c057a42e..4a01610d 100644 --- a/shell/view/frame/clipboardbox.py +++ b/shell/view/frame/clipboardbox.py @@ -1,6 +1,7 @@ import shutil import os import logging +import urlparse import hippo import gtk @@ -79,15 +80,19 @@ class ClipboardBox(hippo.CanvasBox): cb_service = clipboardservice.get_instance() if selection.type == 'text/uri-list': + uris = selection.data.split('\n') + if len(uris) > 1: + raise NotImplementedError('Multiple uris in text/uri-list still not supported.') + uri = urlparse.urlparse(uris[0]) + path, file_name = os.path.split(uri.path) + # Copy the file, as it will be deleted when the dnd operation finishes. - file_path = selection.data.replace('file://', '') - new_file_path = os.path.join(os.path.split(file_path)[0], - "cb" + os.path.split(file_path)[1]) - shutil.copyfile(file_path, new_file_path) + new_file_path = os.path.join(path, 'cb' + file_name) + shutil.copyfile(uri.path, new_file_path) cb_service.add_object_format(object_id, selection.type, - 'file://' + new_file_path, + uri.scheme + "://" + new_file_path, on_disk=True) else: cb_service.add_object_format(object_id,