Improved drag&drop support to be more generic and correct. Fixes LP #643425

This commit is contained in:
Chris Jones 2011-08-20 23:18:56 +01:00
parent 8ba7213409
commit 807947399f
2 changed files with 15 additions and 8 deletions

View File

@ -305,7 +305,11 @@ for %s (%s)' % (name, urlplugin.__class__.__name__))
srcvtetargets = [("vte", gtk.TARGET_SAME_APP, self.TARGET_TYPE_VTE)] srcvtetargets = [("vte", gtk.TARGET_SAME_APP, self.TARGET_TYPE_VTE)]
dsttargets = [("vte", gtk.TARGET_SAME_APP, self.TARGET_TYPE_VTE), dsttargets = [("vte", gtk.TARGET_SAME_APP, self.TARGET_TYPE_VTE),
('text/plain', 0, 0), ('STRING', 0, 0), ('COMPOUND_TEXT', 0, 0)] ('text/x-moz-url', 0, 0),
('_NETSCAPE_URL', 0, 0)]
dsttargets = gtk.target_list_add_text_targets(dsttargets)
dsttargets = gtk.target_list_add_uri_targets(dsttargets)
dbg('Finalised drag targets: %s' % dsttargets)
for (widget, mask) in [ for (widget, mask) in [
(self.vte, gtk.gdk.CONTROL_MASK | gtk.gdk.BUTTON3_MASK), (self.vte, gtk.gdk.CONTROL_MASK | gtk.gdk.BUTTON3_MASK),
@ -314,7 +318,7 @@ for %s (%s)' % (name, urlplugin.__class__.__name__))
self.vte.drag_dest_set(gtk.DEST_DEFAULT_MOTION | self.vte.drag_dest_set(gtk.DEST_DEFAULT_MOTION |
gtk.DEST_DEFAULT_HIGHLIGHT | gtk.DEST_DEFAULT_DROP, gtk.DEST_DEFAULT_HIGHLIGHT | gtk.DEST_DEFAULT_DROP,
dsttargets, gtk.gdk.ACTION_MOVE) dsttargets, gtk.gdk.ACTION_COPY | gtk.gdk.ACTION_MOVE)
for widget in [self.vte, self.titlebar]: for widget in [self.vte, self.titlebar]:
widget.connect('drag-begin', self.on_drag_begin, self) widget.connect('drag-begin', self.on_drag_begin, self)
@ -831,7 +835,8 @@ for %s (%s)' % (name, urlplugin.__class__.__name__))
def on_drag_motion(self, widget, drag_context, x, y, _time, _data): def on_drag_motion(self, widget, drag_context, x, y, _time, _data):
"""*shrug*""" """*shrug*"""
if 'text/plain' in drag_context.targets: if gtk.targets_include_text(drag_context.targets) or \
gtk.targets_include_uri(drag_context.targets):
# copy text from another widget # copy text from another widget
return return
srcwidget = drag_context.get_source_widget() srcwidget = drag_context.get_source_widget()
@ -900,7 +905,9 @@ for %s (%s)' % (name, urlplugin.__class__.__name__))
_info, _time, data): _info, _time, data):
"""Something has been dragged into the terminal. Handle it as either a """Something has been dragged into the terminal. Handle it as either a
URL or another terminal.""" URL or another terminal."""
if selection_data.type == 'text/plain': dbg('drag data received of type: %s' % selection_data.type)
if gtk.targets_include_text(drag_context.targets) or \
gtk.targets_include_uri(drag_context.targets):
# copy text to destination # copy text to destination
txt = selection_data.data.strip() txt = selection_data.data.strip()
if txt[0:7] == 'file://': if txt[0:7] == 'file://':