[evolution-patches] 71312, opening draft from vfolder views not edits




Index: mail/ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution/mail/ChangeLog,v
retrieving revision 1.3556
diff -u -p -r1.3556 ChangeLog
--- mail/ChangeLog	31 Jan 2005 07:28:03 -0000	1.3556
+++ mail/ChangeLog	1 Feb 2005 00:26:23 -0000
@@ -1,3 +1,11 @@
+2005-02-01  Not Zed  <NotZed Ximian com>
+
+	** See bug #71312.
+
+	* em-folder-view.c (em_folder_view_open_selected): if we're
+	looking at a vfolder, then look open the original folder if we need
+	to perform any edits.
+
 2005-01-31  Not Zed  <NotZed Ximian com>
 
 	** See bug #67083
Index: mail/em-folder-view.c
===================================================================
RCS file: /cvs/gnome/evolution/mail/em-folder-view.c,v
retrieving revision 1.102
diff -u -p -r1.102 em-folder-view.c
--- mail/em-folder-view.c	24 Jan 2005 14:46:24 -0000	1.102
+++ mail/em-folder-view.c	1 Feb 2005 00:26:23 -0000
@@ -54,6 +54,7 @@
 #include <camel/camel-multipart.h>
 #include <camel/camel-stream-mem.h>
 #include <camel/camel-url.h>
+#include <camel/camel-vee-folder.h>
 
 #include <bonobo/bonobo-main.h>
 #include <bonobo/bonobo-object.h>
@@ -93,6 +94,7 @@
 #include "mail-autofilter.h"
 #include "mail-vfolder.h"
 #include "mail-component.h"
+#include "mail-tools.h"
 
 #include "evolution-shell-component-utils.h" /* Pixmap stuff, sigh */
 
@@ -365,7 +367,7 @@ em_folder_view_mark_selected(EMFolderVie
 int
 em_folder_view_open_selected(EMFolderView *emfv)
 {
-	GPtrArray *uids;
+	GPtrArray *uids, *views;
 	int i = 0;
 	
 	uids = message_list_get_selected(emfv->list);
@@ -384,26 +386,57 @@ em_folder_view_open_selected(EMFolderVie
 		}
 	}
 
-	if (em_utils_folder_is_drafts(emfv->folder, emfv->folder_uri)
+        if (em_utils_folder_is_drafts(emfv->folder, emfv->folder_uri)
 	    || em_utils_folder_is_outbox(emfv->folder, emfv->folder_uri)) {
 		em_utils_edit_messages(emfv->folder, uids, TRUE);
-	} else {
-		/* TODO: have an em_utils_open_messages call? */
-		for (i=0; i<uids->len; i++) {
-			EMMessageBrowser *emmb;
-
-			emmb = (EMMessageBrowser *)em_message_browser_window_new();
-			message_list_set_threaded(((EMFolderView *)emmb)->list, emfv->list->threaded);
-			em_folder_view_set_hide_deleted((EMFolderView *)emmb, emfv->hide_deleted);
-			/* FIXME: session needs to be passed easier than this */
-			em_format_set_session((EMFormat *)((EMFolderView *)emmb)->preview, ((EMFormat *)emfv->preview)->session);
-			em_folder_view_set_folder((EMFolderView *)emmb, emfv->folder, emfv->folder_uri);
-			em_folder_view_set_message((EMFolderView *)emmb, uids->pdata[i], FALSE);
-			gtk_widget_show(emmb->window);
+		return uids->len;
+	}
+
+	/* for vfolders we need to edit the *original*, not the vfolder copy */
+	views = g_ptr_array_new();
+	for (i=0;i<uids->len;i++) {
+		if (camel_object_is((CamelObject *)emfv->folder, camel_vee_folder_get_type())) {
+			CamelVeeMessageInfo *vinfo = (CamelVeeMessageInfo *)camel_folder_get_message_info(emfv->folder, uids->pdata[i]);
+
+			if (vinfo) {
+				char *uid;
+				/* TODO: get_location shouldn't strdup the uid */
+				CamelFolder *f = camel_vee_folder_get_location((CamelVeeFolder *)emfv->folder, vinfo, &uid);
+				char *uri = mail_tools_folder_to_url(f);
+
+				if (em_utils_folder_is_drafts(f, uri) || em_utils_folder_is_outbox(f, uri)) {
+					GPtrArray *edits = g_ptr_array_new();
+
+					g_ptr_array_add(edits, uid);
+					em_utils_edit_messages(f, edits, TRUE);
+				} else {
+					g_free(uid);
+					g_ptr_array_add(views, g_strdup(uids->pdata[i]));
+				}
+				g_free(uri);
+			}
+		} else {
+			g_ptr_array_add(views, g_strdup(uids->pdata[i]));
 		}
+	}
 
-		message_list_free_uids(emfv->list, uids);
+	/* TODO: have an em_utils_open_messages call? */
+	for (i=0; i<views->len; i++) {
+		EMMessageBrowser *emmb;
+
+		emmb = (EMMessageBrowser *)em_message_browser_window_new();
+		message_list_set_threaded(((EMFolderView *)emmb)->list, emfv->list->threaded);
+		em_folder_view_set_hide_deleted((EMFolderView *)emmb, emfv->hide_deleted);
+		/* FIXME: session needs to be passed easier than this */
+		em_format_set_session((EMFormat *)((EMFolderView *)emmb)->preview, ((EMFormat *)emfv->preview)->session);
+		em_folder_view_set_folder((EMFolderView *)emmb, emfv->folder, emfv->folder_uri);
+		em_folder_view_set_message((EMFolderView *)emmb, views->pdata[i], FALSE);
+		gtk_widget_show(emmb->window);
+		g_free(views->pdata[i]);
 	}
+	g_ptr_array_free(views, TRUE);
+
+	message_list_free_uids(emfv->list, uids);
 
 	return i;
 }
Index: mail/mail-tools.c
===================================================================
RCS file: /cvs/gnome/evolution/mail/mail-tools.c,v
retrieving revision 1.134
diff -u -p -r1.134 mail-tools.c
--- mail/mail-tools.c	20 Sep 2004 05:59:55 -0000	1.134
+++ mail/mail-tools.c	1 Feb 2005 00:26:24 -0000
@@ -406,6 +406,7 @@ mail_tools_x_evolution_message_parse (ch
 	return folder;
 }
 
+/* FIXME: This should be a property on CamelFolder */
 char *
 mail_tools_folder_to_url (CamelFolder *folder)
 {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]