[Sugar-devel] [PATCH 3/3] Journal: fix the API for drag and drop - SL #3999

Manuel Quiñones manuq at laptop.org
Wed Apr 10 15:22:17 EDT 2013


TestCase:

- open Paint activity, draw something
- go to the Journal
- drag the Paint entry to the Documents drive
- insert a USB stick
- drag the Paint entry to the USB drive

The paint should be in Documents and in the stick

Note: this needs the upstream fix
https://bugzilla.gnome.org/show_bug.cgi?id=692844 which is not in GTK+
3.6 but is added in current olpc builds as gtk3-3.6.4.1.fc18.olpc2.
So it can be tested on an XO.

Note: this does not fix the unwanted palette popup as described in the
ticket.  That will be a separate patch.

Signed-off-by: Manuel Quiñones <manuq at laptop.org>
---
 src/jarabe/journal/listmodel.py      | 11 +++++++----
 src/jarabe/journal/volumestoolbar.py |  2 +-
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/src/jarabe/journal/listmodel.py b/src/jarabe/journal/listmodel.py
index b98d01c..980db70 100644
--- a/src/jarabe/journal/listmodel.py
+++ b/src/jarabe/journal/listmodel.py
@@ -237,14 +237,17 @@ class ListModel(GObject.GObject, Gtk.TreeModel, Gtk.TreeDragSource):
 
     def do_drag_data_get(self, path, selection):
         uid = self[path][ListModel.COLUMN_UID]
-        if selection.target == 'text/uri-list':
+        target_atom = selection.get_target()
+        target_name = target_atom.name()
+        if target_name == 'text/uri-list':
             # Get hold of a reference so the temp file doesn't get deleted
             self._temp_drag_file_path = model.get_file(uid)
             logging.debug('putting %r in selection', self._temp_drag_file_path)
-            selection.set(selection.target, 8, self._temp_drag_file_path)
+            selection.set(target_atom, 8, self._temp_drag_file_path)
             return True
-        elif selection.target == 'journal-object-id':
-            selection.set(selection.target, 8, uid)
+        elif target_name == 'journal-object-id':
+            # uid is unicode but Gtk.SelectionData.set() needs str
+            selection.set(target_atom, 8, str(uid))
             return True
 
         return False
diff --git a/src/jarabe/journal/volumestoolbar.py b/src/jarabe/journal/volumestoolbar.py
index e1e6331..750aea5 100644
--- a/src/jarabe/journal/volumestoolbar.py
+++ b/src/jarabe/journal/volumestoolbar.py
@@ -291,7 +291,7 @@ class BaseButton(RadioToolButton):
 
     def _drag_data_received_cb(self, widget, drag_context, x, y,
                                selection_data, info, timestamp):
-        object_id = selection_data.data
+        object_id = selection_data.get_data()
         metadata = model.get(object_id)
         file_path = model.get_file(metadata['uid'])
         if not file_path or not os.path.exists(file_path):
-- 
1.8.1.4



More information about the Sugar-devel mailing list