aboutsummaryrefslogtreecommitdiffstats
path: root/mail
diff options
context:
space:
mode:
Diffstat (limited to 'mail')
-rw-r--r--mail/ChangeLog10
-rw-r--r--mail/component-factory.c62
-rw-r--r--mail/folder-browser.c55
3 files changed, 74 insertions, 53 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog
index 0b329365b1..2067d37ba4 100644
--- a/mail/ChangeLog
+++ b/mail/ChangeLog
@@ -1,3 +1,13 @@
+2001-07-17 Jeffrey Stedfast <fejj@ximian.com>
+
+ * 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.
+
2001-07-17 Jason Leach <jleach@ximian.com>
* mail-config.glade: Make the Path: entry into a GnomeFileEntry so
diff --git a/mail/component-factory.c b/mail/component-factory.c
index f9dc27dee2..5502fa7683 100644
--- a/mail/component-factory.c
+++ b/mail/component-factory.c
@@ -369,14 +369,14 @@ destination_folder_handle_drop (EvolutionShellComponentDndDestinationFolder *des
const GNOME_Evolution_ShellComponentDnd_Data *data,
gpointer user_data)
{
- char *url, *in, *inptr, *inend;
+ char *tmp, *url, **urls, *in, *inptr, *inend;
gboolean retval = FALSE;
CamelFolder *folder;
CamelStream *stream;
CamelException ex;
GPtrArray *uids;
CamelURL *uri;
- int type, fd;
+ int i, type, fd;
if (action == GNOME_Evolution_ShellComponentDnd_ACTION_LINK)
return FALSE; /* we can't create links */
@@ -395,36 +395,42 @@ destination_folder_handle_drop (EvolutionShellComponentDndDestinationFolder *des
if (!folder)
return FALSE;
- url = g_strndup (data->bytes._buffer, data->bytes._length);
- inend = strchr (url, '\n');
- if (inend)
- *inend = '\0';
+ tmp = g_strndup (data->bytes._buffer, data->bytes._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) {
+ retval = TRUE;
+ for (i = 0; urls[i] != NULL && retval; 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, so what do we do in this case? */
+ continue;
+ }
+
+ stream = camel_stream_fs_new_with_fd (fd);
+ message_rfc822_dnd (folder, stream, &ex);
+ camel_object_unref (CAMEL_OBJECT (stream));
+ camel_object_unref (CAMEL_OBJECT (folder));
+
+ retval = !camel_exception_is_set (&ex);
+
+ if (action == GNOME_Evolution_ShellComponentDnd_ACTION_MOVE && retval)
+ unlink (url);
+
g_free (url);
- return FALSE;
}
- stream = camel_stream_fs_new_with_fd (fd);
- message_rfc822_dnd (folder, stream, &ex);
- camel_object_unref (CAMEL_OBJECT (stream));
- camel_object_unref (CAMEL_OBJECT (folder));
-
- retval = !camel_exception_is_set (&ex);
-
- if (action == GNOME_Evolution_ShellComponentDnd_ACTION_MOVE && retval)
- unlink (url);
-
- g_free (url);
+ g_free (urls);
break;
case ACCEPTED_DND_TYPE_MESSAGE_RFC822:
folder = mail_tool_uri_to_folder (physical_uri, &ex);
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 */