[kupfer] nautilusselection: Pass filenames as byte strings over D-Bus
- From: Ulrik Sverdrup <usverdrup src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [kupfer] nautilusselection: Pass filenames as byte strings over D-Bus
- Date: Sat, 29 Aug 2009 23:48:40 +0000 (UTC)
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]