Basic drag'n'drop support on main conversation view (fixes #175)

This commit is contained in:
Thibaut Girka 2018-04-08 20:08:30 +02:00 committed by fiaxh
parent b9125b7e3e
commit f5e0ecafae

View file

@ -4,6 +4,15 @@ using Pango;
using Dino.Entities; using Dino.Entities;
enum Target {
URI_LIST,
STRING
}
const TargetEntry[] target_list = {
{ "text/uri-list", 0, Target.URI_LIST },
};
namespace Dino.Ui.ConversationSummary { namespace Dino.Ui.ConversationSummary {
[GtkTemplate (ui = "/im/dino/Dino/conversation_summary/view.ui")] [GtkTemplate (ui = "/im/dino/Dino/conversation_summary/view.ui")]
@ -58,6 +67,10 @@ public class ConversationView : Box, Plugins.ConversationItemCollection, Plugins
return true; return true;
}); });
drag_dest_unset(main);
drag_dest_set(scrolled, DestDefaults.ALL, target_list, Gdk.DragAction.COPY);
scrolled.drag_data_received.connect(this.on_drag_data_received);
return this; return this;
} }
@ -172,6 +185,28 @@ public class ConversationView : Box, Plugins.ConversationItemCollection, Plugins
do_insert_item(item); do_insert_item(item);
} }
public void on_drag_data_received(Widget widget, Gdk.DragContext context,
int x, int y,
SelectionData selection_data,
uint target_type, uint time) {
if ((selection_data != null) && (selection_data.get_length() >= 0)) {
switch (target_type) {
case Target.URI_LIST:
string[] uris = selection_data.get_uris();
for (int i = 0; i < uris.length; i++) {
try {
string filename = Filename.from_uri(uris[i]);
stream_interactor.get_module(FileManager.IDENTITY).send_file(filename, conversation);
} catch (Error err) {
}
}
break;
default:
break;
}
}
}
public void do_insert_item(Plugins.MetaConversationItem item) { public void do_insert_item(Plugins.MetaConversationItem item) {
lock (meta_items) { lock (meta_items) {
insert_new(item); insert_new(item);