changeset 2040:4c5ad6846300

fixed dnd used glib functions for uri manipulation
author Vladimir Nadvornik <nadvornik@suse.cz>
date Fri, 10 Aug 2012 21:55:29 +0200
parents 995254a632bb
children 4f01c4aeb2d9
files src/collect-table.c src/dupe.c src/img-view.c src/layout_image.c src/pan-view.c src/search.c src/ui_bookmark.c src/ui_pathsel.c src/uri_utils.c src/uri_utils.h src/view_dir.c src/view_file_icon.c src/view_file_list.c
diffstat 13 files changed, 104 insertions(+), 372 deletions(-) [+]
line wrap: on
line diff
--- a/src/collect-table.c	Sat Aug 04 22:13:33 2012 +0200
+++ b/src/collect-table.c	Fri Aug 10 21:55:29 2012 +0200
@@ -2175,6 +2175,9 @@
 				uri_text = collection_info_list_to_dnd_data(ct->cd, list, &total);
 				g_list_free(list);
 				}
+			gtk_selection_data_set(selection_data, gtk_selection_data_get_target(selection_data),
+						8, (guchar *)uri_text, total);
+			g_free(uri_text);
 			break;
 		case TARGET_URI_LIST:
 		case TARGET_TEXT_PLAIN:
@@ -2189,13 +2192,10 @@
 				}
 			if (!list) return;
 
-			uri_text = uri_text_from_filelist(list, &total, (info == TARGET_TEXT_PLAIN));
+			uri_selection_data_set_uris_from_filelist(selection_data, list);
 			filelist_free(list);
 			break;
 		}
-
-	gtk_selection_data_set_text(selection_data, uri_text, total);
-	g_free(uri_text);
 }
 
 
@@ -2254,7 +2254,7 @@
 				}
 			break;
 		case TARGET_URI_LIST:
-			list = uri_filelist_from_text((gchar *)gtk_selection_data_get_data(selection_data), TRUE);
+			list = uri_filelist_from_gtk_selection_data(selection_data);
 			work = list;
 			while (work)
 				{
--- a/src/dupe.c	Sat Aug 04 22:13:33 2012 +0200
+++ b/src/dupe.c	Fri Aug 10 21:55:29 2012 +0200
@@ -3404,16 +3404,13 @@
 		case TARGET_TEXT_PLAIN:
 			list = dupe_listview_get_selection(dw, widget);
 			if (!list) return;
-			uri_text = uri_text_from_filelist(list, &length, (info == TARGET_TEXT_PLAIN));
+			uri_selection_data_set_uris_from_filelist(selection_data, list);
 			filelist_free(list);
 			break;
 		default:
 			uri_text = NULL;
 			break;
 		}
-
-	if (uri_text) gtk_selection_data_set_text(selection_data, uri_text, length);
-	g_free(uri_text);
 }
 
 static void dupe_dnd_data_get(GtkWidget *widget, GdkDragContext *context,
@@ -3437,7 +3434,7 @@
 			collection_from_dnd_data((gchar *)gtk_selection_data_get_data(selection_data), &list, NULL);
 			break;
 		case TARGET_URI_LIST:
-			list = uri_filelist_from_text((gchar *)gtk_selection_data_get_data(selection_data), TRUE);
+			list = uri_filelist_from_gtk_selection_data(selection_data);
 			work = list;
 			while (work)
 				{
--- a/src/img-view.c	Sat Aug 04 22:13:33 2012 +0200
+++ b/src/img-view.c	Fri Aug 10 21:55:29 2012 +0200
@@ -1487,7 +1487,7 @@
 			{
 			GList *work;
 
-			list = uri_filelist_from_text((gchar *)gtk_selection_data_get_data(selection_data), TRUE);
+			list = uri_filelist_from_gtk_selection_data(selection_data);
 
 			work = list;
 			while (work)
@@ -1558,27 +1558,11 @@
 		{
 		gchar *text = NULL;
 		gint len;
-		gboolean plain_text;
 		GList *list;
 
-		switch (info)
-			{
-			case TARGET_URI_LIST:
-				plain_text = FALSE;
-				break;
-			case TARGET_TEXT_PLAIN:
-			default:
-				plain_text = TRUE;
-				break;
-			}
 		list = g_list_append(NULL, fd);
-		text = uri_text_from_filelist(list, &len, plain_text);
+		uri_selection_data_set_uris_from_filelist(selection_data, list);
 		g_list_free(list);
-		if (text)
-			{
-			gtk_selection_data_set_text(selection_data, text, len);
-			g_free(text);
-			}
 		}
 	else
 		{
--- a/src/layout_image.c	Sat Aug 04 22:13:33 2012 +0200
+++ b/src/layout_image.c	Fri Aug 10 21:55:29 2012 +0200
@@ -614,7 +614,7 @@
 
 		if (info == TARGET_URI_LIST)
 			{
-			list = uri_filelist_from_text((gchar *)gtk_selection_data_get_data(selection_data), TRUE);
+			list = uri_filelist_from_gtk_selection_data(selection_data);
 			source = NULL;
 			info_list = NULL;
 			}
@@ -694,27 +694,11 @@
 		{
 		gchar *text = NULL;
 		gint len;
-		gboolean plain_text;
 		GList *list;
 
-		switch (info)
-			{
-			case TARGET_URI_LIST:
-				plain_text = FALSE;
-				break;
-			case TARGET_TEXT_PLAIN:
-			default:
-				plain_text = TRUE;
-				break;
-			}
 		list = g_list_append(NULL, fd);
-		text = uri_text_from_filelist(list, &len, plain_text);
+		uri_selection_data_set_uris_from_filelist(selection_data, list);
 		g_list_free(list);
-		if (text)
-			{
-			gtk_selection_data_set_text(selection_data, text, len);
-			g_free(text);
-			}
 		}
 	else
 		{
--- a/src/pan-view.c	Sat Aug 04 22:13:33 2012 +0200
+++ b/src/pan-view.c	Fri Aug 10 21:55:29 2012 +0200
@@ -2933,7 +2933,7 @@
 		{
 		GList *list;
 
-		list = uri_filelist_from_text((gchar *)gtk_selection_data_get_data(selection_data), TRUE);
+		list = uri_filelist_from_gtk_selection_data(selection_data);
 		if (list && isdir(((FileData *)list->data)->path))
 			{
 			FileData *fd = list->data;
@@ -2957,27 +2957,11 @@
 		{
 		gchar *text = NULL;
 		gint len;
-		gboolean plain_text;
 		GList *list;
 
-		switch (info)
-			{
-			case TARGET_URI_LIST:
-				plain_text = FALSE;
-				break;
-			case TARGET_TEXT_PLAIN:
-			default:
-				plain_text = TRUE;
-				break;
-			}
 		list = g_list_append(NULL, fd);
-		text = uri_text_from_filelist(list, &len, plain_text);
+		uri_selection_data_set_uris_from_filelist(selection_data, list);
 		g_list_free(list);
-		if (text)
-			{
-			gtk_selection_data_set_text(selection_data, text, len);
-			g_free(text);
-			}
 		}
 	else
 		{
--- a/src/search.c	Sat Aug 04 22:13:33 2012 +0200
+++ b/src/search.c	Fri Aug 10 21:55:29 2012 +0200
@@ -1376,26 +1376,13 @@
 				guint time, gpointer data)
 {
 	SearchData *sd = data;
-	gchar *uri_text;
-	gint length;
 	GList *list;
 
-	switch (info)
-		{
-		case TARGET_URI_LIST:
-		case TARGET_TEXT_PLAIN:
-			list = search_result_selection_list(sd);
-			if (!list) return;
-			uri_text = uri_text_from_filelist(list, &length, (info == TARGET_TEXT_PLAIN));
-			filelist_free(list);
-			break;
-		default:
-			uri_text = NULL;
-			break;
-		}
-
-	if (uri_text) gtk_selection_data_set_text(selection_data, uri_text, length);
-	g_free(uri_text);
+	list = search_result_selection_list(sd);
+	if (!list) return;
+
+	uri_selection_data_set_uris_from_filelist(selection_data, list);
+	filelist_free(list);
 }
 
 static void search_dnd_begin(GtkWidget *widget, GdkDragContext *context, gpointer data)
--- a/src/ui_bookmark.c	Sat Aug 04 22:13:33 2012 +0200
+++ b/src/ui_bookmark.c	Fri Aug 10 21:55:29 2012 +0200
@@ -470,33 +470,30 @@
 {
 	BookMarkData *bm = data;
 	BookButtonData *b;
-	gchar *uri_text = NULL;
-	gint length = 0;
 	GList *list = NULL;
 
-//	if (context->dest_window == bm->widget->window) return;
+#if GTK_CHECK_VERSION(3,0,0)
+	if (gdk_drag_context_get_dest_window(context) == gtk_widget_get_window(bm->widget)) return;
+#else
+	if (context->dest_window == bm->widget->window) return;
+#endif
 
 	b = g_object_get_data(G_OBJECT(button), "bookbuttondata");
 	if (!b) return;
 
 	list = g_list_append(list, b->path);
 
-	switch (info)
+	gchar **uris = uris_from_filelist(list);
+	gboolean ret = gtk_selection_data_set_uris(selection_data, uris);
+	if (!ret) 
 		{
-		case TARGET_URI_LIST:
-			uri_text = uri_text_from_list(list, &length, FALSE);
-			break;
-		case TARGET_TEXT_PLAIN:
-			uri_text = uri_text_from_list(list, &length, TRUE);
-			break;
+		char *str = g_strjoinv("\r\n", uris);
+		ret = gtk_selection_data_set_text(selection_data, str, -1);
+		g_free(str);
 		}
 
+	g_strfreev(uris);
 	g_list_free(list);
-
-	if (!uri_text) return;
-
-	gtk_selection_data_set_text(selection_data, uri_text, length);
-	g_free(uri_text);
 }
 
 static void bookmark_drag_begin(GtkWidget *button, GdkDragContext *context, gpointer data)
@@ -686,16 +683,13 @@
 	BookMarkData *bm = data;
 	GList *list = NULL;
 	GList *work;
+	gchar **uris;
 
 	if (!bm->editable) return;
 
-	switch (info)
-		{
-		case TARGET_URI_LIST:
-		case TARGET_X_URL:
-			list = uri_list_from_text((gchar *)gtk_selection_data_get_data(selection_data), FALSE);
-			break;
-		}
+	uris = gtk_selection_data_get_uris(selection_data);
+	list = uri_filelist_from_uris(uris);
+	g_strfreev(uris);
 
 	work = list;
 	while (work)
--- a/src/ui_pathsel.c	Sat Aug 04 22:13:33 2012 +0200
+++ b/src/ui_pathsel.c	Fri Aug 10 21:55:29 2012 +0200
@@ -331,9 +331,7 @@
 			      guint info, guint time, gpointer data)
 {
 	gchar *path = NULL;
-	gchar *uri_text = NULL;
 	GList *list = NULL;
-	gint length = 0;
 	GtkTreeModel *model;
 	GtkTreeSelection *selection;
 	GtkTreeIter iter;
@@ -346,22 +344,16 @@
 
 	list = g_list_append(list, path);
 
-	switch (info)
+	gchar **uris = uris_from_filelist(list);
+	gboolean ret = gtk_selection_data_set_uris(selection_data, uris);
+	if (!ret) 
 		{
-		case TARGET_URI_LIST:
-			uri_text = uri_text_from_list(list, &length, FALSE);
-			break;
-		case TARGET_TEXT_PLAIN:
-			uri_text = uri_text_from_list(list, &length, TRUE);
-			break;
+		char *str = g_strjoinv("\r\n", uris);
+		ret = gtk_selection_data_set_text(selection_data, str, -1);
+		g_free(str);
 		}
 
 	string_list_free(list);
-
-	if (!uri_text) return;
-
-	gtk_selection_data_set_text(selection_data, uri_text, length);
-	g_free(uri_text);
 }
 
 static void dest_dnd_init(Dest_Data *dd)
--- a/src/uri_utils.c	Sat Aug 04 22:13:33 2012 +0200
+++ b/src/uri_utils.c	Fri Aug 10 21:55:29 2012 +0200
@@ -16,256 +16,87 @@
 #include "filedata.h"
 #include "ui_fileops.h"
 
-/*
- *-----------------------------------------------------------------------------
- * drag and drop uri utils
- *-----------------------------------------------------------------------------
- */
+gchar **uris_from_pathlist(GList *list)
+{
+	GList *work;
+	guint i = 0;
+	guint num = g_list_length(list);
+	gchar **uris = g_new0(gchar *, num + 1);
 
-/* the following characters are allowed to be unencoded for pathnames:
- *     $ & + , / : = @
- */
-static gint escape_char_list[] = {
-	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,	/*   0 */
-	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,	/*  10 */
-	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,	/*  20 */
-/*	     spc !  "  #  $  %  &  '	       */
-	1, 1, 0, 0, 1, 1, 0, 1, 0, 0,	/*  30 */
-/*	(  )  *  +  ,  -  .  /  0  1	       */
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/*  40 */
-/*	2  3  4  5  6  7  8  9  :  ;	       */
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 1,	/*  50 */
-/*	<  =  >  ?  @  A  B  C  D  E	       */
-	1, 0, 1, 1, 0, 0, 0, 0, 0, 0,	/*  60 */
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/*  70 */
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/*  80 */
-/*	Z  [  \  ]  ^  _  `  a  b  c	       */
-	0, 1, 1, 1, 1, 0, 1, 0, 0, 0,	/*  90 */
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/* 100 */
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/* 110 */
-/*	x  y  z  {  |  }  ~ del      	       */
-	0, 0, 0, 1, 1, 1, 0, 0		/* 120, 127 is end */
-};
+	work = list;
+	while (work)
+		{
+		const gchar *path = work->data;
+		gchar *local_path = path_from_utf8(path);
+		uris[i] = g_filename_to_uri(local_path, NULL, NULL);
+		g_free(local_path);
+		
+		i++;
+		work = work->next;
+		}
 
-static gchar *hex_char = "0123456789ABCDEF";
-
-static gboolean escape_test(guchar c)
-{
-	if (c < 32 || c > 127) return TRUE;
-	return (escape_char_list[c] != 0);
+	uris[i] = NULL;
+	return uris;
 }
 
-static const gchar *escape_code(guchar c)
-{
-	static gchar text[4];
-
-	text[0] = '%';
-	text[1] = hex_char[c>>4];
-	text[2] = hex_char[c%16];
-	text[3] = '\0';
-
-	return text;
-}
-
-gchar *uri_text_escape(const gchar *text)
+gchar **uris_from_filelist(GList *list)
 {
-	GString *string;
-	gchar *result;
-	const gchar *p;
-
-	if (!text) return NULL;
-
-	string = g_string_new("");
-
-	p = text;
-	while (*p != '\0')
-		{
-		if (escape_test(*p))
-			{
-			g_string_append(string, escape_code(*p));
-			}
-		else
-			{
-			g_string_append_c(string, *p);
-			}
-		p++;
-		}
-
-	result = string->str;
-	g_string_free(string, FALSE);
-
-	/* dropped filenames are expected to be utf-8 compatible */
-	if (!g_utf8_validate(result, -1, NULL))
-		{
-		gchar *tmp;
-
-		tmp = g_locale_to_utf8(result, -1, NULL, NULL, NULL);
-		if (tmp)
-			{
-			g_free(result);
-			result = tmp;
-			}
-		}
-
-	return result;
+	GList *path_list = filelist_to_path_list(list);
+	gchar **ret = uris_from_pathlist(path_list);
+	string_list_free(path_list);
+	return ret;
 }
 
-/* this operates on the passed string, decoding escaped characters */
-void uri_text_decode(gchar *text)
+gboolean uri_selection_data_set_uris_from_filelist(GtkSelectionData *selection_data, GList *list)
 {
-	if (strchr(text, '%'))
+	gchar **uris = uris_from_filelist(list);
+	gboolean ret = gtk_selection_data_set_uris(selection_data, uris);
+	if (!ret) 
 		{
-		gchar *w;
-		gchar *r;
-
-		w = r = text;
-
-		while (*r != '\0')
-			{
-			if (*r == '%' && *(r + 1) != '\0' && *(r + 2) != '\0')
-				{
-				gchar t[3];
-				gint n;
+		char *str = g_strjoinv("\r\n", uris);
+		ret = gtk_selection_data_set_text(selection_data, str, -1);
+		g_free(str);
+		}
 
-				r++;
-				t[0] = *r;
-				r++;
-				t[1] = *r;
-				t[2] = '\0';
-				n = (gint)strtol(t, NULL, 16);
-				if (n > 0 && n < 256)
-					{
-					*w = (gchar)n;
-					}
-				else
-					{
-					/* invalid number, rewind and ignore this escape */
-					r -= 2;
-					*w = *r;
-					}
-				}
-			else if (w != r)
-				{
-				*w = *r;
-				}
-			r++;
-			w++;
-			}
-		if (*w != '\0') *w = '\0';
-		}
+	g_strfreev(uris);
+	return ret;
 }
 
-static void uri_list_parse_encoded_chars(GList *list)
-{
-	GList *work = list;
-
-	while (work)
-		{
-		gchar *text = work->data;
-
-		uri_text_decode(text);
-
-		work = work->next;
-		}
-}
-
-GList *uri_list_from_text(gchar *data, gboolean files_only)
+GList *uri_pathlist_from_uris(gchar **uris)
 {
 	GList *list = NULL;
-	gint b, e;
+	guint i = 0;
 
-	b = e = 0;
-
-	while (data[b] != '\0')
+	while (uris[i])
 		{
-		while (data[e] != '\r' && data[e] != '\n' && data[e] != '\0') e++;
-		if (strncmp(data + b, "file:", 5) == 0)
-			{
-			gchar *path;
-			b += 5;
-			while (data[b] == '/' && data[b+1] == '/') b++;
-			path = g_strndup(data + b, e - b);
-			list = g_list_append(list, path_to_utf8(path));
-			g_free(path);
-			}
-		else if (!files_only && strncmp(data + b, "http:", 5) == 0)
-			{
-			list = g_list_append(list, g_strndup(data + b, e - b));
-			}
-		else if (!files_only && strncmp(data + b, "ftp:", 3) == 0)
-			{
-			list = g_list_append(list, g_strndup(data + b, e - b));
-			}
-		while (data[e] == '\r' || data[e] == '\n') e++;
-		b = e;
+		gchar *local_path = g_filename_from_uri(uris[i], NULL, NULL);
+		gchar *path = path_to_utf8(local_path);
+		g_free(local_path);
+		list = g_list_prepend(list, path);
+		i++;
 		}
 
-	uri_list_parse_encoded_chars(list);
-
-	return list;
+	return g_list_reverse(list);
 }
 
-GList *uri_filelist_from_text(gchar *data, gboolean files_only)
+
+
+GList *uri_filelist_from_uris(gchar **uris)
 {
-	GList *path_list = uri_list_from_text(data, files_only);
+	GList *path_list = uri_pathlist_from_uris(uris);
 	GList *filelist = filelist_from_path_list(path_list);
 	string_list_free(path_list);
 	return filelist;
 }
 
-gchar *uri_text_from_list(GList *list, gint *len, gboolean plain_text)
+GList *uri_filelist_from_gtk_selection_data(GtkSelectionData *selection_data)
 {
-	gchar *uri_text = NULL;
-	GString *string;
-	GList *work;
-
-	if (!list)
-		{
-		if (len) *len = 0;
-		return NULL;
-		}
-
-	string = g_string_new("");
-
-	work = list;
-	while (work)
-		{
-		const gchar *name8;	/* dnd filenames are in utf-8 */
-
-		name8 = work->data;
-
-		if (!plain_text)
-			{
-			gchar *escaped;
-
-			escaped = uri_text_escape(name8);
-			g_string_append(string, "file:");
-			g_string_append(string, escaped);
-			g_free(escaped);
-
-			g_string_append(string, "\r\n");
-			}
-		else
-			{
-			g_string_append(string, name8);
-			if (work->next) g_string_append(string, "\n");
-			}
-
-		work = work->next;
-		}
-
-	uri_text = string->str;
-	if (len) *len = string->len;
-	g_string_free(string, FALSE);
-
-	return uri_text;
+	gchar **uris = gtk_selection_data_get_uris(selection_data);
+	GList *ret = uri_filelist_from_uris(uris);
+	g_strfreev(uris);
+	return ret;
 }
 
-gchar *uri_text_from_filelist(GList *list, gint *len, gboolean plain_text)
-{
-	GList *path_list = filelist_to_path_list(list);
-	gchar *ret = uri_text_from_list(path_list, len, plain_text);
-	string_list_free(path_list);
-	return ret;
-}
+
+
 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
--- a/src/uri_utils.h	Sat Aug 04 22:13:33 2012 +0200
+++ b/src/uri_utils.h	Fri Aug 10 21:55:29 2012 +0200
@@ -12,15 +12,12 @@
 #ifndef URI_UTILS_H
 #define URI_UTILS_H
 
-/* dnd data parsers (uris) */
-
-gchar *uri_text_escape(const gchar *text);
-void uri_text_decode(gchar *text);
-
-GList *uri_list_from_text(gchar *data, gboolean files_only);
-GList *uri_filelist_from_text(gchar *data, gboolean files_only);
-gchar *uri_text_from_list(GList *list, gint *len, gboolean plain_text);
-gchar *uri_text_from_filelist(GList *list, gint *len, gboolean plain_text);
+GList *uri_filelist_from_uris(gchar **uris);
+gchar **uris_from_pathlist(GList *list);
+gchar **uris_from_filelist(GList *list);
+GList *uri_pathlist_from_uris(gchar **uris);
+gboolean uri_selection_data_set_uris_from_filelist(GtkSelectionData *selection_data, GList *list);
+GList *uri_filelist_from_gtk_selection_data(GtkSelectionData *selection_data);
 
 #endif /* URI_UTILS_H */
 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
--- a/src/view_dir.c	Sat Aug 04 22:13:33 2012 +0200
+++ b/src/view_dir.c	Fri Aug 10 21:55:29 2012 +0200
@@ -728,8 +728,6 @@
 {
 	ViewDir *vd = data;
 	GList *list;
-	gchar *uritext = NULL;
-	gint length = 0;
 
 	if (!vd->click_fd) return;
 
@@ -738,15 +736,10 @@
 		case TARGET_URI_LIST:
 		case TARGET_TEXT_PLAIN:
 			list = g_list_prepend(NULL, vd->click_fd);
-			uritext = uri_text_from_filelist(list, &length, (info == TARGET_TEXT_PLAIN));
+			uri_selection_data_set_uris_from_filelist(selection_data, list);
 			g_list_free(list);
 			break;
 		}
-	if (uritext)
-		{
-		gtk_selection_data_set_text(selection_data, uritext, length);
-		g_free(uritext);
-		}
 }
 
 static void vd_dnd_begin(GtkWidget *widget, GdkDragContext *context, gpointer data)
@@ -796,7 +789,7 @@
 		gint active;
 		gboolean done = FALSE;
 
-		list = uri_filelist_from_text((gchar *)gtk_selection_data_get_data(selection_data), TRUE);
+		list = uri_filelist_from_gtk_selection_data(selection_data);
 		if (!list) return;
 
 		active = access_file(fd->path, W_OK | X_OK);
--- a/src/view_file_icon.c	Sat Aug 04 22:13:33 2012 +0200
+++ b/src/view_file_icon.c	Fri Aug 10 21:55:29 2012 +0200
@@ -557,13 +557,8 @@
 		}
 
 	if (!list) return;
-	uri_text = uri_text_from_filelist(list, &total, (info == TARGET_TEXT_PLAIN));
+	uri_selection_data_set_uris_from_filelist(selection_data, list);
 	filelist_free(list);
-
-	DEBUG_1("%s", uri_text);
-
-	gtk_selection_data_set_text(selection_data, uri_text, total);
-	g_free(uri_text);
 }
 
 static void vficon_drag_data_received(GtkWidget *entry_widget, GdkDragContext *context,
--- a/src/view_file_list.c	Sat Aug 04 22:13:33 2012 +0200
+++ b/src/view_file_list.c	Fri Aug 10 21:55:29 2012 +0200
@@ -268,14 +268,8 @@
 		}
 
 	if (!list) return;
-
-	uri_text = uri_text_from_filelist(list, &total, (info == TARGET_TEXT_PLAIN));
+	uri_selection_data_set_uris_from_filelist(selection_data, list);
 	filelist_free(list);
-
-	DEBUG_1("%s", uri_text);
-
-	gtk_selection_data_set_text(selection_data, uri_text, total);
-	g_free(uri_text);
 }
 
 static void vflist_dnd_begin(GtkWidget *widget, GdkDragContext *context, gpointer data)