From bbfb9268af8e5d8c5a0ac346ba13efc00783d46c Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Tue, 17 Jul 2001 20:45:57 +0000 Subject: Fix to correctly handle text/uri-lists that contain more than a single 2001-07-17 Jeffrey Stedfast * folder-browser.c (message_list_drag_data_recieved): Fix to correctly handle text/uri-lists that contain more than a single url. * component-factory.c (destination_folder_handle_drop): Fix to correctly handle text/uri-lists that contain more than a single url. svn path=/trunk/; revision=11174 --- mail/folder-browser.c | 55 ++++++++++++++++++++++++++++----------------------- 1 file changed, 30 insertions(+), 25 deletions(-) (limited to 'mail/folder-browser.c') diff --git a/mail/folder-browser.c b/mail/folder-browser.c index d0662b0266..12af53f9e2 100644 --- a/mail/folder-browser.c +++ b/mail/folder-browser.c @@ -427,44 +427,49 @@ message_list_drag_data_recieved (ETree *tree, int row, ETreePath path, int col, { FolderBrowser *fb = FOLDER_BROWSER (user_data); CamelFolder *folder = NULL; + char *tmp, *url, **urls; GPtrArray *uids = NULL; CamelStream *stream; CamelException ex; - char *inend, *url; CamelURL *uri; - int fd; + int i, fd; camel_exception_init (&ex); switch (info) { case DND_TARGET_TYPE_TEXT_URI_LIST: - url = g_strndup (selection_data->data, selection_data->length); - inend = strchr (url, '\n'); - if (inend) - *inend = '\0'; + tmp = g_strndup (selection_data->data, selection_data->length); + urls = g_strsplit (tmp, "\n", 0); + g_free (tmp); - /* get the path component */ - g_strstrip (url); - uri = camel_url_new (url, NULL); - g_free (url); - url = uri->path; - uri->path = NULL; - camel_url_free (uri); - - fd = open (url, O_RDONLY); - if (fd == -1) { + for (i = 0; urls[i] != NULL; i++) { + /* get the path component */ + url = g_strstrip (urls[i]); + + uri = camel_url_new (url, NULL); + g_free (url); + url = uri->path; + uri->path = NULL; + camel_url_free (uri); + + fd = open (url, O_RDONLY); + if (fd == -1) { + g_free (url); + /* FIXME: okay, what do we do in this case? */ + continue; + } + + stream = camel_stream_fs_new_with_fd (fd); + message_rfc822_dnd (fb->folder, stream, &ex); + camel_object_unref (CAMEL_OBJECT (stream)); + + if (context->action == GDK_ACTION_MOVE && !camel_exception_is_set (&ex)) + unlink (url); + g_free (url); - goto fail; } - stream = camel_stream_fs_new_with_fd (fd); - message_rfc822_dnd (fb->folder, stream, &ex); - camel_object_unref (CAMEL_OBJECT (stream)); - - if (context->action == GDK_ACTION_MOVE && !camel_exception_is_set (&ex)) - unlink (url); - - g_free (url); + g_free (urls); break; case DND_TARGET_TYPE_MESSAGE_RFC822: /* write the message(s) out to a CamelStream so we can use it */ -- cgit