Reviewers: ,
Please review this at http://codereview.tryton.org/18003/
Affected files:
M tryton/gui/window/view_form/view/list.py
Index: tryton/gui/window/view_form/view/list.py
===================================================================
--- a/tryton/gui/window/view_form/view/list.py
+++ b/tryton/gui/window/view_form/view/list.py
@@ -349,16 +349,15 @@
if screen.readonly:
dnd = False
if dnd:
- self.widget_tree.enable_model_drag_source(gtk.gdk.BUTTON1_MASK,
- [('MY_TREE_MODEL_ROW', gtk.TARGET_SAME_WIDGET, 0),],
- gtk.gdk.ACTION_MOVE)
self.widget_tree.drag_source_set(gtk.gdk.BUTTON1_MASK |
gtk.gdk.BUTTON3_MASK,
[('MY_TREE_MODEL_ROW', gtk.TARGET_SAME_WIDGET, 0),],
gtk.gdk.ACTION_MOVE)
- self.widget_tree.enable_model_drag_dest(
+ self.widget_tree.drag_dest_set(gtk.DEST_DEFAULT_ALL,
[('MY_TREE_MODEL_ROW', gtk.TARGET_SAME_WIDGET, 0),],
gtk.gdk.ACTION_MOVE)
+ self.widget_tree.connect('drag-begin', self.drag_begin)
+ self.widget_tree.connect('drag-motion', self.drag_motion)
self.widget_tree.connect('drag-drop', self.drag_drop)
self.widget_tree.connect("drag-data-get", self.drag_data_get)
self.widget_tree.connect('drag-data-received',
self.drag_data_received)
@@ -503,6 +502,22 @@
del selection
return
+ def drag_begin(self, treeview, context):
+ return True
+
+ def drag_motion(self, treeview, context, x, y, time):
+ try:
+ treeview.set_drag_dest_row(*treeview.get_dest_row_at_pos(x, y))
+ except TypeError:
+ treeview.set_drag_dest_row(len(treeview.get_model()) - 1,
+ gtk.TREE_VIEW_DROP_AFTER)
+ if context.get_source_widget() == treeview:
+ kind = gtk.gdk.ACTION_MOVE
+ else:
+ kind = gtk.gdk.ACTION_COPY
+ context.drag_status(kind, time)
+ return True
+
def drag_drop(self, treeview, context, x, y, time):
treeview.emit_stop_by_name('drag-drop')
treeview.drag_get_data(context, context.targets[-1], time)
@@ -521,6 +536,7 @@
return
data = str(data[0])
selection.set(selection.target, 8, data)
+ return True
def drag_data_received(self, treeview, context, x, y, selection,
info, etime):
@@ -566,6 +582,7 @@
context.drop_finish(False, etime)
if treeview.sequence:
record.group.set_sequence(field=treeview.sequence)
+ return True
def drag_data_delete(self, treeview, context):
treeview.emit_stop_by_name('drag-data-delete')
--
[email protected] mailing list