[kupfer] nautilusselection: Pass filenames as byte strings over D-Bus



commit 62c845a6737abd2a0674388c8a2b4bf14db316ac
Author: Ulrik Sverdrup <ulrik sverdrup gmail com>
Date:   Sun Aug 30 00:20:10 2009 +0200

    nautilusselection: Pass filenames as byte strings over D-Bus
    
    As file system paths do not all have to have the same encoding, pass
    paths as byte strings over D-Bus.

 extras/kupfer_provider.py          |    7 ++++++-
 kupfer/plugin/nautilusselection.py |    8 +++++---
 2 files changed, 11 insertions(+), 4 deletions(-)
---
diff --git a/extras/kupfer_provider.py b/extras/kupfer_provider.py
index 36c1328..80ad2d7 100644
--- a/extras/kupfer_provider.py
+++ b/extras/kupfer_provider.py
@@ -32,8 +32,13 @@ interface_name="se.kaizer.KupferNautilusPlugin"
 object_path = "/se/kaizer/kupfer/NautilusPlugin"
 
 class Object (ExportedGObject):
-	@dbus.service.signal(interface_name, signature="as")
+	@dbus.service.signal(interface_name, signature="aay")
 	def SelectionChanged(self, paths):
+		"""Nautilus selection changed. Passes an array of byte strings;
+		We have no idea which encoding the filesystem uses, so we
+		send filesystem bytes; the receiver should use glib to
+		decode the byte strings to strings.
+		"""
 		return paths
 
 class KupferSelectionProvider(nautilus.MenuProvider):
diff --git a/kupfer/plugin/nautilusselection.py b/kupfer/plugin/nautilusselection.py
index de90875..9d747d0 100644
--- a/kupfer/plugin/nautilusselection.py
+++ b/kupfer/plugin/nautilusselection.py
@@ -1,6 +1,7 @@
 import os
 
 import dbus
+import gobject
 
 from kupfer.objects import Source, Leaf, FileLeaf, SourceLeaf, PicklingHelperMixin
 from kupfer import objects
@@ -13,8 +14,8 @@ __author__ = "Ulrik Sverdrup <ulrik sverdrup gmail com>"
 
 class SelectedFile (FileLeaf):
 	def __init__(self, filepath):
-		"""@filepath is unicode and can be safely used"""
-		basename = os.path.basename(filepath)
+		"""@filepath is a filesystem byte string `str`"""
+		basename = gobject.filename_display_basename(filepath)
 		FileLeaf.__init__(self, filepath, _('Selected File "%s"') % basename)
 
 	def rank_key(self):
@@ -34,7 +35,8 @@ class SelectionSource (Source, PicklingHelperMixin):
 	def unpickle_finish(self):
 		session_bus = dbus.Bus()
 		session_bus.add_signal_receiver(self._selected_signal, 
-				dbus_interface="se.kaizer.KupferNautilusPlugin")
+				dbus_interface="se.kaizer.KupferNautilusPlugin",
+				byte_arrays=True)
 		self._selection = []
 
 	def _selected_signal(self, selection):



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]