Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/palettes.py
diff options
context:
space:
mode:
Diffstat (limited to 'palettes.py')
-rw-r--r--palettes.py54
1 files changed, 40 insertions, 14 deletions
diff --git a/palettes.py b/palettes.py
index efab5fb..bae47a5 100644
--- a/palettes.py
+++ b/palettes.py
@@ -20,6 +20,7 @@ import urlparse
from gettext import gettext as _
import gtk
+import xpcom
from xpcom import components
from xpcom.components import interfaces
@@ -134,7 +135,6 @@ class ImagePalette(Palette):
Palette.__init__(self)
self._url = url
- self._temp_file = None
self.props.primary_text = title
self.props.secondary_text = url
@@ -148,12 +148,6 @@ class ImagePalette(Palette):
menu_item.show()
def __copy_activate_cb(self, menu_item):
- clipboard = gtk.Clipboard()
- clipboard.set_with_data([('text/uri-list', 0, 0)],
- self.__clipboard_get_func_cb,
- self.__clipboard_clear_func_cb)
-
- def __clipboard_get_func_cb(self, clipboard, selection_data, info, data):
file_name = os.path.basename(urlparse.urlparse(self._url).path)
if '.' in file_name:
base_name, extension = file_name.split('.')
@@ -163,10 +157,10 @@ class ImagePalette(Palette):
extension = ''
temp_path = os.path.join(activity.get_activity_root(), 'instance')
- fd, self._temp_file = tempfile.mkstemp(dir=temp_path, prefix=base_name,
+ fd, temp_file = tempfile.mkstemp(dir=temp_path, prefix=base_name,
suffix=extension)
os.close(fd)
- os.chmod(self._temp_file, 0664)
+ os.chmod(temp_file, 0664)
cls = components.classes['@mozilla.org/network/io-service;1']
io_service = cls.getService(interfaces.nsIIOService)
@@ -174,17 +168,49 @@ class ImagePalette(Palette):
cls = components.classes['@mozilla.org/file/local;1']
target_file = cls.createInstance(interfaces.nsILocalFile)
- target_file.initWithPath(self._temp_file)
+ target_file.initWithPath(temp_file)
cls = components.classes[ \
'@mozilla.org/embedding/browser/nsWebBrowserPersist;1']
persist = cls.createInstance(interfaces.nsIWebBrowserPersist)
persist.persistFlags = 1 # PERSIST_FLAGS_FROM_CACHE
+ listener = xpcom.server.WrapObject(_ImageProgressListener(temp_file),
+ interfaces.nsIWebProgressListener)
+ persist.progressListener = listener
persist.saveURI(uri, None, None, None, None, target_file)
- selection_data.set_uris(['file://' + self._temp_file])
+class _ImageProgressListener(object):
+ _com_interfaces_ = interfaces.nsIWebProgressListener
- def __clipboard_clear_func_cb(self, clipboard, data):
- if os.path.exists(self._temp_file):
- os.remove(self._temp_file)
+ def __init__(self, temp_file):
+ self._temp_file = temp_file
+
+ def onLocationChange(self, webProgress, request, location):
+ pass
+
+ def onProgressChange(self, webProgress, request, curSelfProgress,
+ maxSelfProgress, curTotalProgress, maxTotalProgress):
+ pass
+
+ def onSecurityChange(self, webProgress, request, state):
+ pass
+
+ def onStatusChange(self, webProgress, request, status, message):
+ pass
+
+ def onStateChange(self, webProgress, request, stateFlags, status):
+ if stateFlags & interfaces.nsIWebProgressListener.STATE_IS_REQUEST and \
+ stateFlags & interfaces.nsIWebProgressListener.STATE_STOP:
+ clipboard = gtk.Clipboard()
+ clipboard.set_with_data([('text/uri-list', 0, 0)],
+ _clipboard_get_func_cb,
+ _clipboard_clear_func_cb,
+ self._temp_file)
+
+def _clipboard_get_func_cb(clipboard, selection_data, info, temp_file):
+ selection_data.set_uris(['file://' + temp_file])
+
+def _clipboard_clear_func_cb(clipboard, temp_file):
+ if os.path.exists(temp_file):
+ os.remove(temp_file)