From a02e8f7603dd784f17f1a831ae218c5010da9adc Mon Sep 17 00:00:00 2001 From: Andrew Resch Date: Mon, 21 Jul 2008 00:01:04 +0000 Subject: [PATCH] Implement #342 drag n' drop on the main window --- deluge/ui/gtkui/mainwindow.py | 12 ++++++++++++ deluge/ui/gtkui/torrentview.py | 5 +++++ 2 files changed, 17 insertions(+) diff --git a/deluge/ui/gtkui/mainwindow.py b/deluge/ui/gtkui/mainwindow.py index c87226458..199f358f8 100644 --- a/deluge/ui/gtkui/mainwindow.py +++ b/deluge/ui/gtkui/mainwindow.py @@ -36,10 +36,12 @@ pygtk.require('2.0') import gtk, gtk.glade import gobject import pkg_resources +from urlparse import urlparse from deluge.ui.client import aclient as client import deluge.component as component from deluge.configmanager import ConfigManager +from deluge.ui.gtkui.ipcinterface import process_args import deluge.common @@ -65,10 +67,14 @@ class MainWindow(component.Component): # UI when it is minimized. self.is_minimized = False + self.window.drag_dest_set(gtk.DEST_DEFAULT_ALL, [('text/uri-list', 0, + 80)], gtk.gdk.ACTION_COPY) + # Connect events self.window.connect("window-state-event", self.on_window_state_event) self.window.connect("configure-event", self.on_window_configure_event) self.window.connect("delete-event", self.on_window_delete_event) + self.window.connect("drag-data-received", self.on_drag_data_received_event) self.vpaned.connect("notify::position", self.on_vpaned_position_event) if not(self.config["start_in_tray"] and \ @@ -183,3 +189,9 @@ class MainWindow(component.Component): self.config.set("window_pane_position", self.config["window_height"] - self.vpaned.get_position()) + def on_drag_data_received_event(self, widget, drag_context, x, y, selection_data, info, timestamp): + args = [] + for uri in selection_data.data.split(): + args.append(urlparse(uri).path) + process_args(args) + drag_context.finish(True, True) diff --git a/deluge/ui/gtkui/torrentview.py b/deluge/ui/gtkui/torrentview.py index b921aa38a..eaa482a90 100644 --- a/deluge/ui/gtkui/torrentview.py +++ b/deluge/ui/gtkui/torrentview.py @@ -184,6 +184,8 @@ class TorrentView(listview.ListView, component.Component): # changes. self.treeview.get_selection().connect("changed", self.on_selection_changed) + + self.treeview.connect("drag-drop", self.on_drag_drop) def start(self): """Start the torrentview""" @@ -458,3 +460,6 @@ class TorrentView(listview.ListView, component.Component): component.get("ToolBar").update_buttons() component.get("MenuBar").update_menu() + def on_drag_drop(self, widget, drag_context, x, y, timestamp): + widget.stop_emission("drag-drop") +