sylpheedclaws/sylpheed-claws/src compose.c,1.382.2.276,1.382.2.277 compose.h,1.50.2.25,1.50.2.26 folder.c,1.213.2.97,1.213.2.98 folder.h,1.87.2.28,1.87.2.29 imap.c,1.179.2.119,1.179.2.120 inc.c,1.149.2.51,1.149.2.52 main.c,1.115.2.89,1.115.2.90 messageview.c,1.94.2.85,1.94.2.86 mh.c,1.79.2.34,1.79.2.35 prefs_folder_item.c,1.52.2.20,1.52.2.21 procheader.c,1.47.2.30,1.47.2.31 procmime.c,1.49.2.76,1.49.2.77 procmsg.c,1.150.2.67,1.150.2.68 procmsg.h,1.60.2.28,1.60.2.29 send_message.c,1.17.2.30,1.17.2.31 summaryview.c,1.395.2.219,1.395.2.220 toolbar.c,1.43.2.46,1.43.2.47

[email protected]
Newsgroups gmane.mail.sylpheed.claws.cvs
Message-ID <[email protected]>
Update of /pack/anoncvs/sylpheedclaws/sylpheed-claws/src
In directory sunsite.dk:/tmp/cvs-serv23413/src

Modified Files:
      Tag: gtk2
	compose.c compose.h folder.c folder.h imap.c inc.c main.c 
	messageview.c mh.c prefs_folder_item.c procheader.c procmime.c 
	procmsg.c procmsg.h send_message.c summaryview.c toolbar.c 
Log Message:
2006-06-12 [colin]	2.3.0cvs5

	* src/compose.c
	* src/compose.h
	* src/folder.c
	* src/folder.h
	* src/imap.c
	* src/inc.c
	* src/main.c
	* src/messageview.c
	* src/mh.c
	* src/prefs_folder_item.c
	* src/procheader.c
	* src/procmime.c
	* src/procmsg.c
	* src/procmsg.h
	* src/send_message.c
	* src/summaryview.c
	* src/toolbar.c
		Apply bug #964's patch (Queue and drafts aren't normal)
		The Drafts and Queue folder now contain RFC-822 files,
		allowing to move and copy mails from and to these 
		folders. Moving from Drafts to Queue will prepare the
		mail for sending (PGP signature, encryption, etc).
		This patch also rework sending errors handling to try
		to be more helpful.
		Also, allow redefining folder types via the GUI 
		(Folder type in its Properties)

Index: compose.c
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/sylpheed-claws/src/compose.c,v
retrieving revision 1.382.2.276
retrieving revision 1.382.2.277
diff -u -d -r1.382.2.276 -r1.382.2.277
--- compose.c	2006/06/09 14:48:46	1.382.2.276
+++ compose.c	2006/06/12 17:08:12	1.382.2.277
@@ -271,15 +271,12 @@
 static gint compose_remove_reedit_target	(Compose	*compose,
 						 gboolean	 force);
 void compose_remove_draft			(Compose	*compose);
-static gint compose_queue			(Compose	*compose,
-						 gint		*msgnum,
-						 FolderItem	**item,
-						 gchar		**msgpath);
 static gint compose_queue_sub			(Compose	*compose,
 						 gint		*msgnum,
 						 FolderItem	**item,
 						 gchar		**msgpath,
-						 gboolean	check_subject);
+						 gboolean	check_subject,
+						 gboolean 	remove_reedit_target);
 static void compose_add_attachments		(Compose	*compose,
 						 MimeInfo	*parent);
 static gchar *compose_get_header		(Compose	*compose);
@@ -506,8 +503,6 @@
 static gint compose_defer_auto_save_draft	(Compose	*compose);
 static PrefsAccount *compose_guess_forward_account_from_msginfo	(MsgInfo *msginfo);
 
-static gboolean compose_close	(Compose *compose);
-
 static GtkItemFactoryEntry compose_popup_entries[] =
 {
 	{N_("/_Add..."),	NULL, compose_attach_cb, 0, NULL},
@@ -1626,7 +1621,7 @@
 		}
 }
 
-void compose_reedit(MsgInfo *msginfo)
+Compose *compose_reedit(MsgInfo *msginfo, gboolean batch)
 {
 	Compose *compose = NULL;
 	PrefsAccount *account = NULL;
@@ -1640,11 +1635,11 @@
 	gboolean use_encryption = FALSE;
 	gchar *privacy_system = NULL;
 
-	g_return_if_fail(msginfo != NULL);
-	g_return_if_fail(msginfo->folder != NULL);
+	g_return_val_if_fail(msginfo != NULL, NULL);
+	g_return_val_if_fail(msginfo->folder != NULL, NULL);
 
 	if (compose_put_existing_to_front(msginfo)) {
-		return;
+		return NULL;
 	}
 
         if (folder_has_parent_of_type(msginfo->folder, F_QUEUE) ||
@@ -1706,9 +1701,9 @@
         if (!account) {
         	account = cur_account;
         }
-	g_return_if_fail(account != NULL);
+	g_return_val_if_fail(account != NULL, NULL);
 
-	compose = compose_create(account, COMPOSE_REEDIT, FALSE);
+	compose = compose_create(account, COMPOSE_REEDIT, batch);
 	
 	compose->updating = TRUE;
 	
@@ -1750,7 +1745,7 @@
 	if (compose_parse_header(compose, msginfo) < 0) {
 		compose->updating = FALSE;
 		compose_destroy(compose);
-		return;
+		return NULL;
 	}
 	compose_reedit_set_entry(compose, msginfo);
 
@@ -1810,7 +1805,9 @@
 
 	if (compose->deferred_destroy) {
 		compose_destroy(compose);
+		return NULL;
 	}
+	return compose;
 }
 
 Compose *compose_redirect(PrefsAccount *account, MsgInfo *msginfo,
@@ -3949,6 +3946,9 @@
 		}
 		if (!found_other) {
 			AlertValue aval;
+			if (compose->batch) {
+				gtk_widget_show_all(compose->window);
+			}
 			aval = alertpanel(_("Send"),
 					  _("The only recipient is the default CC address. Send anyway?"),
 					  GTK_STOCK_CANCEL, _("+_Send"), NULL);
@@ -3977,6 +3977,9 @@
 		}
 		if (!found_other) {
 			AlertValue aval;
+			if (compose->batch) {
+				gtk_widget_show_all(compose->window);
+			}
 			aval = alertpanel(_("Send"),
 					  _("The only recipient is the default BCC address. Send anyway?"),
 					  GTK_STOCK_CANCEL, _("+_Send"), NULL);
@@ -3992,6 +3995,9 @@
 	const gchar *str;
 
 	if (compose_check_for_valid_recipient(compose) == FALSE) {
+		if (compose->batch) {
+			gtk_widget_show_all(compose->window);
+		}
 		alertpanel_error(_("Recipient is not specified."));
 		return FALSE;
 	}
@@ -4019,11 +4025,11 @@
 gint compose_send(Compose *compose)
 {
 	gint msgnum;
-	FolderItem *folder;
+	FolderItem *folder = NULL;
 	gint val = -1;
 	gchar *msgpath = NULL;
 	gboolean discard_window = FALSE;
-
+	gchar *errstr = NULL;
 	if (prefs_common.send_dialog_mode != SEND_DIALOG_ALWAYS
 			|| compose->batch == TRUE)
 		discard_window = TRUE;
@@ -4038,7 +4044,7 @@
 		goto bail;
 	}
 
-	val = compose_queue(compose, &msgnum, &folder, &msgpath);
+	val = compose_queue(compose, &msgnum, &folder, &msgpath, TRUE);
 
 	if (val) {
 		if (compose->batch) {
@@ -4078,10 +4084,10 @@
 	
 	if (msgpath == NULL) {
 		msgpath = folder_item_fetch_msg(folder, msgnum);
-		val = procmsg_send_message_queue(msgpath);
+		val = procmsg_send_message_queue(msgpath, &errstr);
 		g_free(msgpath);
 	} else {
-		val = procmsg_send_message_queue(msgpath);
+		val = procmsg_send_message_queue(msgpath, &errstr);
 		g_unlink(msgpath);
 		g_free(msgpath);
 	}
@@ -4100,9 +4106,17 @@
 		if (!discard_window)
 			compose_close(compose);
 	} else {
-		alertpanel_error(_("The message was queued but could not be "
+		if (errstr) {
+			gchar *tmp = g_strdup_printf(_("%s\nUse \"Send queued messages\" from "
+				   "the main window to retry."), errstr);
+			g_free(errstr);
+			alertpanel_error_log(tmp);
+			g_free(tmp);
+		} else {
+			alertpanel_error_log(_("The message was queued but could not be "
 				   "sent.\nUse \"Send queued messages\" from "
 				   "the main window to retry."));
+		}
 		if (!discard_window) {
 			goto bail;		
 		}
@@ -4608,11 +4622,14 @@
 
 }
 
-static gint compose_queue(Compose *compose, gint *msgnum, FolderItem **item, gchar **msgpath)
+gint compose_queue(Compose *compose, gint *msgnum, FolderItem **item, gchar **msgpath,
+		   gboolean remove_reedit_target)
 {
-	return compose_queue_sub (compose, msgnum, item, msgpath, FALSE);
+	return compose_queue_sub (compose, msgnum, item, msgpath, FALSE, remove_reedit_target);
 }
-static gint compose_queue_sub(Compose *compose, gint *msgnum, FolderItem **item, gchar **msgpath, gboolean check_subject)
+static gint compose_queue_sub(Compose *compose, gint *msgnum, FolderItem **item, 
+			      gchar **msgpath, gboolean check_subject,
+			      gboolean remove_reedit_target)
 {
 	FolderItem *queue;
 	gchar *tmp;
@@ -4629,6 +4646,9 @@
 	
 	if (compose_check_entries(compose, check_subject) == FALSE) {
                 lock = FALSE;
+		if (compose->batch) {
+			gtk_widget_show_all(compose->window);
+		}
                 return -1;
 	}
 
@@ -4666,6 +4686,7 @@
 	if ((fp = g_fopen(tmp, "wb")) == NULL) {
 		FILE_OP_ERROR(tmp, "fopen");
 		g_free(tmp);
+		lock = FALSE;
 		return -2;
 	}
 
@@ -4777,7 +4798,9 @@
 		fprintf(fp, "FMID:%s\t%d\t%s\n", folderid, compose->fwdinfo->msgnum, compose->fwdinfo->msgid);
 		g_free(folderid);
 	}
-	fprintf(fp, "\n");
+
+	/* end of headers */
+	fprintf(fp, "X-Sylpheed-End-Special-Headers: 1\n");
 
 	if (compose->redirect_filename != NULL) {
 		if (compose_redirect_write_to_file(compose, fp) < 0) {
@@ -4802,14 +4825,20 @@
 		FILE_OP_ERROR(tmp, "fclose");
 		g_unlink(tmp);
 		g_free(tmp);
+		lock = FALSE;
 		return -2;
 	}
 
-	queue = account_get_special_folder(compose->account, F_QUEUE);
+	if (item && *item) {
+		queue = *item;
+	} else {
+		queue = account_get_special_folder(compose->account, F_QUEUE);
+	}
 	if (!queue) {
 		g_warning("can't find queue folder\n");
 		g_unlink(tmp);
 		g_free(tmp);
+		lock = FALSE;
 		return -1;
 	}
 	folder_item_scan(queue);
@@ -4817,6 +4846,7 @@
 		g_warning("can't queue the message\n");
 		g_unlink(tmp);
 		g_free(tmp);
+		lock = FALSE;
 		return -1;
 	}
 	
@@ -4826,7 +4856,7 @@
 	} else
 		*msgpath = tmp;
 
-	if (compose->mode == COMPOSE_REEDIT) {
+	if (compose->mode == COMPOSE_REEDIT && remove_reedit_target) {
 		compose_remove_reedit_target(compose, FALSE);
 	}
 
@@ -7481,10 +7511,12 @@
 	Compose *compose = (Compose *)data;
 	gint val;
 
-	val = compose_queue_sub(compose, NULL, NULL, NULL, TRUE);
+	val = compose_queue_sub(compose, NULL, NULL, NULL, TRUE, TRUE);
 	if (!val) 
 		compose_close(compose);
-	else if (val == -2) {
+	else if (val == -1) {
+		alertpanel_error(_("Could not queue message."));
+	} else if (val == -2) {
 		alertpanel_error(_("Could not queue message:\n\n%s."), strerror(errno));
 	} else if (val == -3) {
 		alertpanel_error(_("Could not queue message for sending:\n\n"
@@ -7560,8 +7592,10 @@
 		fprintf(fp, "X-Sylpheed-Encrypt:%d\n", compose->use_encryption);
 		fprintf(fp, "X-Sylpheed-Privacy-System:%s\n", compose->privacy_system);
 	}
-	fprintf(fp, "\n");
 
+	/* end of headers */
+	fprintf(fp, "X-Sylpheed-End-Special-Headers: 1\n");
+
 	if (compose_write_to_file(compose, fp, COMPOSE_WRITE_FOR_STORE) < 0) {
 		fclose(fp);
 		g_unlink(tmp);
@@ -8760,7 +8794,7 @@
 	return account;
 }
 
-static gboolean compose_close(Compose *compose)
+gboolean compose_close(Compose *compose)
 {
 	gint x, y;
 

Index: compose.h
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/sylpheed-claws/src/compose.h,v
retrieving revision 1.50.2.25
retrieving revision 1.50.2.26
diff -u -d -r1.50.2.25 -r1.50.2.26
--- compose.h	2006/05/12 17:46:08	1.50.2.25
+++ compose.h	2006/06/12 17:08:13	1.50.2.26
@@ -265,7 +265,8 @@
 Compose *compose_redirect		(PrefsAccount	*account,
 					 MsgInfo	*msginfo,
 					 gboolean	 batch);
-void compose_reedit			(MsgInfo	*msginfo);
+Compose *compose_reedit			(MsgInfo	*msginfo,
+					 gboolean	 batch);
 
 GList *compose_get_compose_list		(void);
 
@@ -302,5 +303,10 @@
 gboolean compose_search_string_backward	(Compose	*compose,
 						 const gchar	*str,
 						 gboolean	 case_sens);
-
+gint compose_queue			(Compose *compose, 
+					 gint *msgnum, 
+					 FolderItem **item, 
+					 gchar **msgpath,
+					 gboolean remove_reedit_target);
+gboolean compose_close			(Compose *compose);
 #endif /* __COMPOSE_H__ */

Index: folder.c
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/sylpheed-claws/src/folder.c,v
retrieving revision 1.213.2.97
retrieving revision 1.213.2.98
diff -u -d -r1.213.2.97 -r1.213.2.98
--- folder.c	2006/06/09 14:48:48	1.213.2.97
+++ folder.c	2006/06/12 17:08:13	1.213.2.98
@@ -56,6 +56,7 @@
 #include "statusbar.h"
 #include "gtkutils.h"
 #include "timing.h"
+#include "compose.h"
 
 /* Dependecies to be removed ?! */
 #include "prefs_common.h"
@@ -90,7 +91,6 @@
 					(GNode *node, GHashTable *pptable);
 static gboolean persist_prefs_free	(gpointer key, gpointer val, gpointer data);
 void folder_item_read_cache		(FolderItem *item);
-gboolean folder_item_free_cache		(FolderItem *item, gboolean force);
 gint folder_item_scan_full		(FolderItem *item, gboolean filtering);
 static void folder_item_update_with_msg (FolderItem *item, FolderItemUpdateFlags update_flags,
                                          MsgInfo *msg);
@@ -199,6 +199,58 @@
 	folder->trash = NULL;
 }
 
+static void reset_parent_type(FolderItem *item, gpointer data) {
+	item->parent_stype = -1;
+}
+
+void folder_item_change_type(FolderItem *item, SpecialFolderItemType newtype)
+{
+	FolderItem *parent;
+	Folder *folder = NULL;
+	FolderUpdateData hookdata;
+
+	if ((parent = folder_item_parent(item)) != NULL 
+	&& folder_item_parent(parent) != NULL) {
+		g_warning("can't change subfolder's type");
+		return;
+	}
+	folder = item->folder;
+	/* unset previous root of newtype */
+	switch(newtype) {
+	case F_INBOX:
+		folder_item_change_type(folder->inbox, F_NORMAL);
+		folder->inbox = item;
+		break;
+	case F_OUTBOX:
+		folder_item_change_type(folder->outbox, F_NORMAL);
+		folder->outbox = item;
+		break;
+	case F_QUEUE:
+		folder_item_change_type(folder->queue, F_NORMAL);
+		folder->queue = item;
+		break;
+	case F_DRAFT:
+		folder_item_change_type(folder->draft, F_NORMAL);
+		folder->draft = item;
+		break;
+	case F_TRASH:
+		folder_item_change_type(folder->trash, F_NORMAL);
+		folder->trash = item;
+		break;
+	case F_NORMAL:
+	default:
+		break;
+	}
+	/* set new type for current folder and sons */
+	item->stype = newtype;
+	folder_func_to_all_folders(reset_parent_type, NULL);
+	
+	hookdata.folder = folder;
+	hookdata.update_flags = FOLDER_TREE_CHANGED;
+	hookdata.item = NULL;
+	hooks_invoke(FOLDER_UPDATE_HOOKLIST, &hookdata);
+}
+
 void folder_destroy(Folder *folder)
 {
 	g_return_if_fail(folder != NULL);
@@ -2826,6 +2878,7 @@
 	GRelation *relation;
 	GSList *not_moved = NULL;
 	gint total = 0, curmsg = 0;
+	MsgInfo *msginfo = NULL;
 
 	g_return_val_if_fail(dest != NULL, -1);
 	g_return_val_if_fail(msglist != NULL, -1);
@@ -2835,6 +2888,40 @@
 	g_return_val_if_fail(folder->klass->copy_msg != NULL, -1);
 	if (dest->no_select)
 		return -1;
+
+	msginfo = (MsgInfo *)msglist->data;
+	
+	if (!msginfo)
+		return -1;
+	
+	if (!MSG_IS_QUEUED(msginfo->flags) && 
+	    MSG_IS_DRAFT(msginfo->flags) && 
+	    folder_has_parent_of_type(dest, F_QUEUE)) {
+		GSList *cur = msglist;
+		gboolean queue_err = FALSE;
+		for (; cur; cur = cur->next) {
+			Compose *compose = NULL;
+			FolderItem *queue = dest;
+			int val = 0;
+			
+			msginfo = (MsgInfo *)cur->data;
+			compose = compose_reedit(msginfo, TRUE);
+			if (compose == NULL) {
+				queue_err = TRUE;
+				continue;
+			}
+			val = compose_queue(compose, NULL, &queue, NULL,
+					FALSE);
+			if (val < 0) {
+				queue_err = TRUE;
+			} else if (remove_source) {
+				folder_item_remove_msg(msginfo->folder, msginfo->msgnum);
+			}
+			if (val == 0)
+				compose_close(compose);
+		}
+		return queue_err ? -1:0;
+	}
 
 	relation = g_relation_new(2);
 	g_relation_index(relation, 0, g_direct_hash, g_direct_equal);

Index: folder.h
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/sylpheed-claws/src/folder.h,v
retrieving revision 1.87.2.28
retrieving revision 1.87.2.29
diff -u -d -r1.87.2.28 -r1.87.2.29
--- folder.h	2006/05/19 17:09:05	1.87.2.28
+++ folder.h	2006/06/12 17:08:14	1.87.2.29
@@ -822,5 +822,8 @@
 					 gpointer data);
 gboolean folder_subscribe		(const gchar *uri);
 gboolean folder_have_mailbox 		(void);
+gboolean folder_item_free_cache		(FolderItem *item, gboolean force);
+void folder_item_change_type		(FolderItem *item,
+					 SpecialFolderItemType newtype);
 
 #endif /* __FOLDER_H__ */

Index: imap.c
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/sylpheed-claws/src/imap.c,v
retrieving revision 1.179.2.119
retrieving revision 1.179.2.120
diff -u -d -r1.179.2.119 -r1.179.2.120
--- imap.c	2006/05/31 16:43:18	1.179.2.119
+++ imap.c	2006/06/12 17:08:14	1.179.2.120
@@ -483,8 +483,6 @@
 
 static void imap_folder_destroy(Folder *folder)
 {
-	gchar *dir;
-
 	while (imap_folder_get_refcnt(folder) > 0)
 		gtk_main_iteration();
 	
@@ -1061,7 +1059,6 @@
 		IMAPFlags iflags = 0;
 		guint32 new_uid = 0;
 		gchar *real_file = NULL;
-		gboolean file_is_tmp = FALSE;
 		fileinfo = (MsgFileInfo *)cur->data;
 
 		statusbar_progress_all(curnum, total, 1);
@@ -1076,28 +1073,6 @@
 				iflags |= IMAP_FLAG_SEEN;
 		}
 		
-		if (fileinfo->flags) {
-			if ((MSG_IS_QUEUED(*fileinfo->flags) 
-			     || MSG_IS_DRAFT(*fileinfo->flags))
-			&& !folder_has_parent_of_type(dest, F_QUEUE)
-			&& !folder_has_parent_of_type(dest, F_DRAFT)) {
-				real_file = get_tmp_file();
-				file_is_tmp = TRUE;
-				if (procmsg_remove_special_headers(
-						fileinfo->file, 
-						real_file) !=0) {
-					g_free(real_file);
-					g_free(destdir);
-					unlock_session();
-					return -1;
-				}
-			}  else if (!(MSG_IS_QUEUED(*fileinfo->flags) 
-				      || MSG_IS_DRAFT(*fileinfo->flags))
-				    && (folder_has_parent_of_type(dest, F_QUEUE)
-				    || folder_has_parent_of_type(dest, F_DRAFT))) {
-				return -1;
-			} 
-		}
 		if (real_file == NULL)
 			real_file = g_strdup(fileinfo->file);
 		
@@ -1112,8 +1087,6 @@
 
 		if (ok != IMAP_SUCCESS) {
 			g_warning("can't append message %s\n", real_file);
-			if (file_is_tmp)
-				g_unlink(real_file);
 			g_free(real_file);
 			g_free(destdir);
 			unlock_session();
@@ -1149,8 +1122,6 @@
 		}
 		if (last_uid < new_uid)
 			last_uid = new_uid;
-		if (file_is_tmp)
-			g_unlink(real_file);
 
 		g_free(real_file);
 	}
@@ -1196,6 +1167,27 @@
 		return -1;
 	}
 
+	if (src->folder != dest->folder) {
+		GSList *infolist = NULL, *cur;
+		int res = -1;
+		for (cur = msglist; cur; cur = cur->next) {
+			msginfo = (MsgInfo *)cur->data;
+			MsgFileInfo *fileinfo = g_new0(MsgFileInfo, 1);
+			fileinfo->file = procmsg_get_message_file(msginfo);
+			fileinfo->flags = &(msginfo->flags);
+			infolist = g_slist_prepend(infolist, fileinfo);
+		}
+		infolist = g_slist_reverse(infolist);
+		res = folder_item_add_msgs(dest, infolist, FALSE);
+		for (cur = infolist; cur; cur = cur->next) {
+			MsgFileInfo *info = (MsgFileInfo *)cur->data;
+			g_free(info->file);
+			g_free(info);
+		}
+		g_slist_free(infolist);
+		return res;
+	} 
+
 	ok = imap_select(session, IMAP_FOLDER(folder), msginfo->folder->path,
 			 NULL, NULL, NULL, NULL, FALSE);
 	if (ok != IMAP_SUCCESS) {
@@ -1278,7 +1270,6 @@
 		    MsgInfoList *msglist, GRelation *relation)
 {
 	MsgInfo *msginfo;
-	GSList *file_list;
 	gint ret;
 
 	g_return_val_if_fail(folder != NULL, -1);
@@ -1287,31 +1278,8 @@
 
 	msginfo = (MsgInfo *)msglist->data;
 	g_return_val_if_fail(msginfo->folder != NULL, -1);
-
-	/* if from/to are the same "type" (with or without extra headers),
-	 * copy them via imap */
-	if (folder == msginfo->folder->folder &&
-	    !folder_has_parent_of_type(msginfo->folder, F_DRAFT) &&
-	    !folder_has_parent_of_type(msginfo->folder, F_QUEUE) &&
-	    !folder_has_parent_of_type(dest, F_DRAFT) &&
-	    !folder_has_parent_of_type(dest, F_QUEUE)) {
-		ret = imap_do_copy_msgs(folder, dest, msglist, relation);
-		return ret;
-	} else if (folder == msginfo->folder->folder &&
-	    (folder_has_parent_of_type(msginfo->folder, F_DRAFT) ||
-	     folder_has_parent_of_type(msginfo->folder, F_QUEUE)) && 
-	    (folder_has_parent_of_type(dest, F_DRAFT) ||
-	     folder_has_parent_of_type(dest, F_QUEUE))) {
-		ret = imap_do_copy_msgs(folder, dest, msglist, relation);
-		return ret;
-	}
-	/* else reupload them */
-	file_list = procmsg_get_message_file_list(msglist);
-	g_return_val_if_fail(file_list != NULL, -1);
 
-	ret = imap_add_msgs(folder, dest, file_list, relation);
-	procmsg_message_file_list_free(file_list);
-
+	ret = imap_do_copy_msgs(folder, dest, msglist, relation);
 	return ret;
 }
 

Index: inc.c
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/sylpheed-claws/src/inc.c,v
retrieving revision 1.149.2.51
retrieving revision 1.149.2.52
diff -u -d -r1.149.2.51 -r1.149.2.52
--- inc.c	2006/06/02 16:48:39	1.149.2.51
+++ inc.c	2006/06/12 17:08:15	1.149.2.52
@@ -688,7 +688,7 @@
 			    inc_state == INC_IO_ERROR)
 				break;
 		}
-		folder_item_free_cache(processing);
+		folder_item_free_cache(processing, TRUE);
 
 		inc_session_destroy(session);
 		inc_dialog->queue_list =

Index: main.c
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/sylpheed-claws/src/main.c,v
retrieving revision 1.115.2.89
retrieving revision 1.115.2.90
diff -u -d -r1.115.2.89 -r1.115.2.90
--- main.c	2006/06/02 16:48:39	1.115.2.89
+++ main.c	2006/06/12 17:08:15	1.115.2.90
@@ -608,7 +608,7 @@
 	if (item->opened)
 		folder_item_close(item);
 
-	folder_item_free_cache(item);
+	folder_item_free_cache(item, TRUE);
 }
 
 static void exit_sylpheed(MainWindow *mainwin)
@@ -1218,21 +1218,29 @@
 static void send_queue(void)
 {
 	GList *list;
-
+	gchar *errstr = NULL;
 	for (list = folder_get_list(); list != NULL; list = list->next) {
 		Folder *folder = list->data;
 
 		if (folder->queue) {
 			gint res = procmsg_send_queue
-				(folder->queue, prefs_common.savemsg);
+				(folder->queue, prefs_common.savemsg,
+				&errstr);
 
-			if (res < 0) {
-				alertpanel_error(_("Some errors occurred while sending queued messages."));
-			}
 			if (res) {
 				folder_item_scan(folder->queue);
 			}
 		}
+	}
+	if (errstr) {
+		gchar *tmp = g_strdup_printf(_("Some errors occurred "
+				"while sending queued messages:\n%s"), errstr);
+		g_free(errstr);
+		alertpanel_error_log(tmp);
+		g_free(tmp);
+	} else {
+		alertpanel_error_log("Some errors occurred "
+				"while sending queued messages.");
 	}
 }
 

Index: messageview.c
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/sylpheed-claws/src/messageview.c,v
retrieving revision 1.94.2.85
retrieving revision 1.94.2.86
diff -u -d -r1.94.2.85 -r1.94.2.86
--- messageview.c	2006/06/01 08:04:35	1.94.2.85
+++ messageview.c	2006/06/12 17:08:16	1.94.2.86
@@ -529,7 +529,7 @@
 	gchar *path;
         gchar *addr;
         gchar *addrp;
-
+	gchar *foo = NULL;
 	if ((!msginfo->returnreceiptto) && 
 	    (!msginfo->dispositionnotificationto)) 
 		return -1;
@@ -709,8 +709,9 @@
 
 	/* send it */
 	path = folder_item_fetch_msg(queue, num);
-	ok = procmsg_send_message_queue(path);
+	ok = procmsg_send_message_queue(path, &foo);
 	g_free(path);
+	g_free(foo);
 	folder_item_remove_msg(queue, num);
 
 	return ok;
@@ -1558,7 +1559,7 @@
 	    !folder_has_parent_of_type(msginfo->folder, F_QUEUE)) 
 		return;
 
-	compose_reedit(msginfo);
+	compose_reedit(msginfo, FALSE);
 }
 
 static void addressbook_open_cb(gpointer data, guint action, GtkWidget *widget)

Index: mh.c
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/sylpheed-claws/src/mh.c,v
retrieving revision 1.79.2.34
retrieving revision 1.79.2.35
diff -u -d -r1.79.2.34 -r1.79.2.35
--- mh.c	2006/06/07 07:30:08	1.79.2.34
+++ mh.c	2006/06/12 17:08:16	1.79.2.35
@@ -461,7 +461,6 @@
 	gint filemode = 0;
 	FolderItemPrefs *prefs;
 	MsgInfo *msginfo = NULL;
-	gboolean remove_special_headers = FALSE;
 	MsgInfoList *cur = NULL;
 	gint curnum = 0, total = 0;
 	gchar *srcpath = NULL;
@@ -487,19 +486,6 @@
 		if (dest->last_num < 0) return -1;
 	}
 
-	if ((MSG_IS_QUEUED(msginfo->flags) || MSG_IS_DRAFT(msginfo->flags))
-	&& !folder_has_parent_of_type(dest, F_QUEUE)
-	&& !folder_has_parent_of_type(dest, F_DRAFT)) {
-		/* as every msginfo comes from the same folder, it is supposed they
-		 * will either match the preceding condition either all or none.
-		 */
-		remove_special_headers = TRUE;
-	} else if (!(MSG_IS_QUEUED(msginfo->flags) || MSG_IS_DRAFT(msginfo->flags))
-	&& (folder_has_parent_of_type(dest, F_QUEUE)
-	 || folder_has_parent_of_type(dest, F_DRAFT))) {
-		return -1;
-	} 
-
 	prefs = dest->prefs;
 
 	srcpath = folder_item_get_path(msginfo->folder);
@@ -512,7 +498,6 @@
 			statusbar_print_all(_("Copying messages..."));
 	}
 	for (cur = msglist; cur; cur = cur->next) {
-		gboolean moved = FALSE;
 		msginfo = (MsgInfo *)cur->data;
 		if (!msginfo) {
 			goto err_reset_status;
@@ -545,13 +530,7 @@
 			    msginfo->msgnum, dest->path);
 
 
-		if (remove_special_headers) {
-			if (procmsg_remove_special_headers(srcfile, destfile) !=0) {
-				g_free(srcfile);
-				g_free(destfile);
-				goto err_reset_status;
-			}
-		} else if (MSG_IS_MOVE(msginfo->flags)) {
+		if (MSG_IS_MOVE(msginfo->flags)) {
 			if (move_file(srcfile, destfile, TRUE) < 0) {
 				FILE_OP_ERROR(srcfile, "move");
 				if (copy_file(srcfile, destfile, TRUE) < 0) {

Index: prefs_folder_item.c
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/sylpheed-claws/src/prefs_folder_item.c,v
retrieving revision 1.52.2.20
retrieving revision 1.52.2.21
diff -u -d -r1.52.2.20 -r1.52.2.21
--- prefs_folder_item.c	2006/06/05 14:15:17	1.52.2.20
+++ prefs_folder_item.c	2006/06/12 17:08:16	1.52.2.21
@@ -32,6 +32,7 @@
 #include "folder.h"
 #include "prefs_folder_item.h"
 #include "folderview.h"
+#include "folder.h"
 #include "summaryview.h"
 #include "menu.h"
 #include "account.h"
@@ -65,6 +66,7 @@
 	FolderItem *item;
 
 	GtkWidget *table;
+	GtkWidget *folder_type;
 	GtkWidget *checkbtn_simplify_subject;
 	GtkWidget *entry_simplify_subject;
 	GtkWidget *checkbtn_folder_chmod;
@@ -137,13 +139,21 @@
                                 		   gpointer data)
 {
 	FolderItemGeneralPage *page = (FolderItemGeneralPage *) page_;
-	FolderItem *item = (FolderItem *) data;
+	FolderItem *item = (FolderItem *) data, *parent;
 	guint rowcount;
 
+
 	GtkWidget *table;
 	GtkWidget *hbox;
 	GtkWidget *label;
 	
+	GtkWidget *folder_type_menu;
+	GtkWidget *folder_type;
+	GtkWidget *dummy_chkbtn;
+	GtkWidget *menuitem;
+	SpecialFolderItemType type;
+	gboolean type_apply_to_sub = TRUE;
+	
 	GtkWidget *checkbtn_simplify_subject;
 	GtkWidget *entry_simplify_subject;
 	GtkWidget *checkbtn_folder_chmod;
@@ -177,6 +187,56 @@
 			 rowcount, rowcount + 1, GTK_SHRINK, GTK_SHRINK, 0, 0);
 	rowcount++;
 
+	/* folder_type */
+	folder_type = gtk_option_menu_new ();
+	gtk_widget_show (folder_type);
+
+	parent = item;
+	type = F_NORMAL;
+	while (parent && (type = parent->stype) == F_NORMAL) {
+		parent = folder_item_parent(parent);
+	}
+
+	if (type == F_INBOX && (parent = folder_item_parent(item)) != NULL
+	&&  folder_item_parent(parent) != NULL) {
+		type = F_NORMAL;
+		type_apply_to_sub = FALSE;
+	}
+
+	folder_type_menu = gtk_menu_new ();
+
+	MENUITEM_ADD (folder_type_menu, menuitem, _("Normal"),  F_NORMAL);
+	MENUITEM_ADD (folder_type_menu, menuitem, _("Inbox"),  F_INBOX);
+	MENUITEM_ADD (folder_type_menu, menuitem, _("Outbox"),  F_OUTBOX);
+	MENUITEM_ADD (folder_type_menu, menuitem, _("Drafts"),  F_DRAFT);
+	MENUITEM_ADD (folder_type_menu, menuitem, _("Queue"),  F_QUEUE);
+	MENUITEM_ADD (folder_type_menu, menuitem, _("Trash"),  F_TRASH);
+	gtk_option_menu_set_menu (GTK_OPTION_MENU (folder_type), folder_type_menu);
+
+	gtk_option_menu_set_history(GTK_OPTION_MENU(folder_type), type);
+
+	dummy_chkbtn = gtk_check_button_new();
+	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dummy_chkbtn), type_apply_to_sub);
+	gtk_widget_set_sensitive(dummy_chkbtn, FALSE);
+
+	if (((parent = folder_item_parent(item)) != NULL
+	&&  folder_item_parent(parent) == NULL)
+	&&  item->stype == F_NORMAL) {
+		gtk_widget_set_sensitive(folder_type, TRUE);
+	} else {
+		gtk_widget_set_sensitive(folder_type, FALSE);
+	}
+	label = gtk_label_new(_("Folder type:"));
+	gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+	gtk_table_attach(GTK_TABLE(table), label, 0, 1, 
+			 rowcount, rowcount + 1, GTK_SHRINK | GTK_FILL, GTK_FILL, 0, 0);
+	gtk_table_attach(GTK_TABLE(table), folder_type, 1, 2, 
+			 rowcount, rowcount + 1, GTK_SHRINK | GTK_FILL, GTK_FILL, 0, 0);
+	gtk_table_attach(GTK_TABLE(table), dummy_chkbtn, 2, 3, 
+			 rowcount, rowcount + 1, GTK_SHRINK, GTK_SHRINK, 0, 0);
+
+	rowcount++;
+
 	/* Simplify Subject */
 	checkbtn_simplify_subject = gtk_check_button_new_with_label(_("Simplify Subject RegExp: "));
 	gtk_table_attach(GTK_TABLE(table), checkbtn_simplify_subject, 0, 1, 
@@ -306,6 +366,7 @@
 	gtk_widget_show_all(table);
 
 	page->table = table;
+	page->folder_type = folder_type;
 	page->checkbtn_simplify_subject = checkbtn_simplify_subject;
 	page->entry_simplify_subject = entry_simplify_subject;
 	page->checkbtn_folder_chmod = checkbtn_folder_chmod;
@@ -340,6 +401,9 @@
 	FolderItemPrefs *prefs = folder->prefs;
 	gchar *buf;
 	gboolean all = FALSE;
+	SpecialFolderItemType type = F_NORMAL;
+	GtkWidget *menu;
+	GtkWidget *menuitem;
 
 	if (folder->path == NULL)
 		return;
@@ -348,6 +412,14 @@
 
 	if (page->item == folder) 
 		all = TRUE;
+
+	menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(page->folder_type));
+	menuitem = gtk_menu_get_active(GTK_MENU(menu));
+	type = GPOINTER_TO_INT
+		(g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
+	if (all && folder->stype != type) {
+		folder_item_change_type(folder, type);
+	}
 
 	if (all || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->simplify_subject_rec_checkbtn))) {
 		prefs->enable_simplify_subject =

Index: procheader.c
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/sylpheed-claws/src/procheader.c,v
retrieving revision 1.47.2.30
retrieving revision 1.47.2.31
diff -u -d -r1.47.2.30 -r1.47.2.31
--- procheader.c	2006/05/26 10:25:58	1.47.2.30
+++ procheader.c	2006/06/12 17:08:17	1.47.2.31
@@ -435,6 +435,8 @@
 	gchar *hp;
 	HeaderEntry *hentry;
 	gint hnum;
+	void *orig_data = data;
+
 	get_one_field_func get_one_field =
 		isstring ? (get_one_field_func)string_get_one_field
 			 : (get_one_field_func)procheader_get_one_field;
@@ -442,8 +444,22 @@
 	hentry = procheader_get_headernames(full);
 
 	if (MSG_IS_QUEUED(flags) || MSG_IS_DRAFT(flags)) {
-		while (get_one_field(buf, sizeof(buf), data, NULL) != -1)
-			; /* loop */
+		while (get_one_field(buf, sizeof(buf), data, NULL) != -1) {
+			if (!strncmp(buf, "X-Sylpheed-End-Special-Headers: 1",
+				strlen("X-Sylpheed-End-Special-Headers:")))
+				break;
+			/* from other mailers */
+			if (!strncmp(buf, "Date: ", 6)
+			||  !strncmp(buf, "To: ", 4)
+			||  !strncmp(buf, "From: ", 6)
+			||  !strncmp(buf, "Subject: ", 9)) {
+				if (isstring)
+					data = orig_data;
+				else 
+					rewind((FILE *)data);
+				break;
+			}
+		}
 	}
 
 	msginfo = procmsg_msginfo_new();

Index: procmime.c
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/sylpheed-claws/src/procmime.c,v
retrieving revision 1.49.2.76
retrieving revision 1.49.2.77
diff -u -d -r1.49.2.76 -r1.49.2.77
--- procmime.c	2006/04/06 10:58:10	1.49.2.76
+++ procmime.c	2006/06/12 17:08:17	1.49.2.77
@@ -1841,8 +1841,22 @@
 	if ((fp = g_fopen(filename, "rb")) == NULL)
 		return NULL;
 	/* Skip queue header */
-	while (fgets(buf, sizeof(buf), fp) != NULL)
+	while (fgets(buf, sizeof(buf), fp) != NULL) {
+		/* new way */
+		if (!strncmp(buf, "X-Sylpheed-End-Special-Headers: 1",
+			strlen("X-Sylpheed-End-Special-Headers:")))
+			break;
+		/* old way */
 		if (buf[0] == '\r' || buf[0] == '\n') break;
+		/* from other mailers */
+		if (!strncmp(buf, "Date: ", 6)
+		||  !strncmp(buf, "To: ", 4)
+		||  !strncmp(buf, "From: ", 6)
+		||  !strncmp(buf, "Subject: ", 9)) {
+			rewind(fp);
+			break;
+		}
+	}
 	offset = ftell(fp);
 	fclose(fp);
 

Index: procmsg.c
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/sylpheed-claws/src/procmsg.c,v
retrieving revision 1.150.2.67
retrieving revision 1.150.2.68
diff -u -d -r1.150.2.67 -r1.150.2.68
--- procmsg.c	2006/06/02 17:06:32	1.150.2.67
+++ procmsg.c	2006/06/12 17:08:18	1.150.2.68
@@ -47,7 +47,7 @@
 #include "log.h"
 #include "timing.h"
 
-static gint procmsg_send_message_queue_full(const gchar *file, gboolean keep_session);
+static gint procmsg_send_message_queue_full(const gchar *file, gboolean keep_session, gchar **errstr);
 
 enum
 {
@@ -63,6 +63,7 @@
 	Q_PRIVACY_SYSTEM   = 9,
 	Q_ENCRYPT 	   = 10,
 	Q_ENCRYPT_DATA	   = 11,
+	Q_SYLPHEED_HDRS    = 12,
 };
 
 GHashTable *procmsg_msg_hash_table_create(GSList *mlist)
@@ -540,8 +541,22 @@
 	if (MSG_IS_QUEUED(msginfo->flags) || MSG_IS_DRAFT(msginfo->flags)) {
 		gchar buf[BUFFSIZE];
 
-		while (fgets(buf, sizeof(buf), fp) != NULL)
+		while (fgets(buf, sizeof(buf), fp) != NULL) {
+			/* new way */
+			if (!strncmp(buf, "X-Sylpheed-End-Special-Headers: 1",
+				strlen("X-Sylpheed-End-Special-Headers:")))
+				break;
+			/* old way */
 			if (buf[0] == '\r' || buf[0] == '\n') break;
+			/* from other mailers */
+			if (!strncmp(buf, "Date: ", 6)
+			||  !strncmp(buf, "To: ", 4)
+			||  !strncmp(buf, "From: ", 6)
+			||  !strncmp(buf, "Subject: ", 9)) {
+				rewind(fp);
+				break;
+			}
+		}
 	}
 
 	return fp;
@@ -873,7 +888,7 @@
  *\return	Number of messages sent, negative if an error occurred
  *		positive if no error occurred
  */
-gint procmsg_send_queue(FolderItem *queue, gboolean save_msgs)
+gint procmsg_send_queue(FolderItem *queue, gboolean save_msgs, gchar **errstr)
 {
 	gint sent = 0, err = 0;
 	GSList *list, *elem;
@@ -883,6 +898,10 @@
 	
 	if (send_queue_lock) {
 		log_error(_("Already trying to send\n"));
+		if (errstr) {
+			if (*errstr) g_free(*errstr);
+			*errstr = g_strdup_printf(_("Already trying to send."));
+		}
 		return -1;
 	}
 	send_queue_lock = TRUE;
@@ -905,7 +924,8 @@
 			file = folder_item_fetch_msg(queue, msginfo->msgnum);
 			if (file) {
 				if (procmsg_send_message_queue_full(file, 
-						!procmsg_is_last_for_account(queue, msginfo, elem)) < 0) {
+						!procmsg_is_last_for_account(queue, msginfo, elem),
+						errstr) < 0) {
 					g_warning("Sending queued message %d failed.\n", 
 						  msginfo->msgnum);
 					err++;
@@ -930,7 +950,7 @@
 		while (node != NULL) {
 			int res = 0;
 			next = node->next;
-			res = procmsg_send_queue(FOLDER_ITEM(node->data), save_msgs);
+			res = procmsg_send_queue(FOLDER_ITEM(node->data), save_msgs, errstr);
 			if (res < 0) 
 				err = -res;
 			else
@@ -991,8 +1011,22 @@
 		fclose(fp);
 		return -1;
 	}
-	while (fgets(buf, sizeof(buf), fp) != NULL)
+	while (fgets(buf, sizeof(buf), fp) != NULL) {
+		/* new way */
+		if (!strncmp(buf, "X-Sylpheed-End-Special-Headers: 1",
+			strlen("X-Sylpheed-End-Special-Headers:")))
+			break;
+		/* old way */
 		if (buf[0] == '\r' || buf[0] == '\n') break;
+		/* from other mailers */
+		if (!strncmp(buf, "Date: ", 6)
+		||  !strncmp(buf, "To: ", 4)
+		||  !strncmp(buf, "From: ", 6)
+		||  !strncmp(buf, "Subject: ", 9)) {
+			rewind(fp);
+			break;
+		}
+	}
 	while (fgets(buf, sizeof(buf), fp) != NULL)
 		fputs(buf, outfp);
 	fclose(outfp);
@@ -1036,7 +1070,7 @@
 			g_warning("can't save message\n");
 			return -1;
 		}
-		return -1;
+		return 0;
 	}
 	msginfo = folder_item_get_msginfo(outbox, num);		/* refcnt++ */
 	tmp_msginfo = procmsg_msginfo_get_full_info(msginfo);	/* refcnt++ */ 
@@ -1354,7 +1388,7 @@
 	return msginfo1->msgnum - msginfo2->msgnum;
 }
 
-static gint procmsg_send_message_queue_full(const gchar *file, gboolean keep_session)
+static gint procmsg_send_message_queue_full(const gchar *file, gboolean keep_session, gchar **errstr)
 {
 	static HeaderEntry qentry[] = {{"S:",    NULL, FALSE},
 				       {"SSV:",  NULL, FALSE},
@@ -1368,6 +1402,7 @@
 				       {"X-Sylpheed-Privacy-System:", NULL, FALSE},
 				       {"X-Sylpheed-Encrypt:", NULL, FALSE},
 				       {"X-Sylpheed-Encrypt-Data:", NULL, FALSE},
+				       {"X-Sylpheed-End-Special-Headers:", NULL, FALSE},
 				       {NULL,    NULL, FALSE}};
 	FILE *fp;
 	gint filepos;
@@ -1394,6 +1429,10 @@
 
 	if ((fp = g_fopen(file, "rb")) == NULL) {
 		FILE_OP_ERROR(file, "fopen");
+		if (errstr) {
+			if (*errstr) g_free(*errstr);
+			*errstr = g_strdup_printf(_("Couldn't open file %s."), file);
+		}
 		return -1;
 	}
 
@@ -1446,8 +1485,12 @@
 			if (encrypt_data == NULL) 
 				encrypt_data = g_strdup(p);
 			break;
+		case Q_SYLPHEED_HDRS:
+			/* end of special headers reached */
+			goto send_mail; /* can't "break;break;" */
 		}
 	}
+send_mail:
 	filepos = ftell(fp);
 
 	if (encrypt) {
@@ -1480,6 +1523,10 @@
 			g_free(fwdmessageid);
 			g_free(privacy_system);
 			g_free(encrypt_data);
+			if (errstr) {
+				if (*errstr) g_free(*errstr);
+				*errstr = g_strdup_printf(_("Couldn't encrypt the email."));
+			}
 			return -1;
 		}
 		
@@ -1508,7 +1555,10 @@
 	if (to_list) {
 		debug_print("Sending message by mail\n");
 		if (!from) {
-			g_warning("Queued message header is broken.\n");
+			if (errstr) {
+				if (*errstr) g_free(*errstr);
+				*errstr = g_strdup_printf(_("Queued message header is broken."));
+			}
 			mailval = -1;
 		} else if (mailac && mailac->use_mail_command &&
 			   mailac->mail_command && (* mailac->mail_command)) {
@@ -1524,9 +1574,13 @@
 				}
 			}
 
-			if (mailac)
+			if (mailac) {
 				mailval = send_message_smtp_full(mailac, to_list, fp, keep_session);
-			else {
+				if (mailval == -1 && errstr) {
+					if (*errstr) g_free(*errstr);
+					*errstr = g_strdup_printf(_("An error happened during SMTP session."));
+				}
+			} else {
 				PrefsAccount tmp_ac;
 
 				g_warning("Account not found.\n");
@@ -1536,11 +1590,21 @@
 				tmp_ac.smtp_server = smtpserver;
 				tmp_ac.smtpport = SMTP_PORT;
 				mailval = send_message_smtp(&tmp_ac, to_list, fp);
+				if (mailval == -1 && errstr) {
+					if (*errstr) g_free(*errstr);
+					*errstr = g_strdup_printf(_("No specific account has been found to "
+							"send, and an error happened during SMTP session."));
+				}
 			}
 		}
-	} else if (!to_list && !newsgroup_list) 
+	} else if (!to_list && !newsgroup_list) {
+		if (errstr) {
+			if (*errstr) g_free(*errstr);
+			*errstr = g_strdup(_("Couldn't determine sending informations. "
+				"Maybe the email hasn't been generated by Sylpheed-Claws."));
+		}
 		mailval = -1;
-
+	}
 
 	fseek(fp, filepos, SEEK_SET);
 	if (newsgroup_list && (mailval == 0)) {
@@ -1565,7 +1629,10 @@
 				if (fputs(buf, tmpfp) == EOF) {
 					FILE_OP_ERROR(tmp, "fputs");
 					newsval = -1;
-					alertpanel_error(_("Error when writing temporary file for news sending."));
+					if (errstr) {
+						if (*errstr) g_free(*errstr);
+						*errstr = g_strdup_printf(_("Error when writing temporary file for news sending."));
+					}
 				}
 			}
 			fclose(tmpfp);
@@ -1576,10 +1643,11 @@
 				folder = FOLDER(newsac->folder);
 
     				newsval = news_post(folder, tmp);
-    				if (newsval < 0) {
-            				alertpanel_error(_("Error occurred while posting the message to %s ."),
-                            			 newsac->nntp_server);
-    				}
+    				if (newsval < 0 && errstr)  {
+					if (*errstr) g_free(*errstr);
+					*errstr = g_strdup_printf(_("Error occurred while posting the message to %s."),
+                            		 newsac->nntp_server);
+				}
 			}
 			g_unlink(tmp);
 		}
@@ -1668,9 +1736,9 @@
 	return (newsval != 0 ? newsval : mailval);
 }
 
-gint procmsg_send_message_queue(const gchar *file)
+gint procmsg_send_message_queue(const gchar *file, gchar **errstr)
 {
-	return procmsg_send_message_queue_full(file, FALSE);
+	return procmsg_send_message_queue_full(file, FALSE, errstr);
 }
 
 static void update_folder_msg_counts(FolderItem *item, MsgInfo *msginfo, MsgPermFlags old_flags)

Index: procmsg.h
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/sylpheed-claws/src/procmsg.h,v
retrieving revision 1.60.2.28
retrieving revision 1.60.2.29
diff -u -d -r1.60.2.28 -r1.60.2.29
--- procmsg.h	2006/05/12 17:42:48	1.60.2.28
+++ procmsg.h	2006/06/12 17:08:18	1.60.2.29
@@ -287,7 +287,8 @@
 void	procmsg_empty_all_trash		(void);
 
 gint	procmsg_send_queue		(FolderItem	*queue,
-					 gboolean	 save_msgs);
+					 gboolean	 save_msgs,
+					 gchar		**errstr);
 gboolean procmsg_queue_is_empty	(FolderItem *queue);
 gint	procmsg_save_to_outbox		(FolderItem	*outbox,
 					 const gchar	*file,
@@ -304,7 +305,8 @@
 
 gint procmsg_cmp_msgnum_for_sort	(gconstpointer	 a,
 					 gconstpointer	 b);
-gint procmsg_send_message_queue		(const gchar *file);
+gint procmsg_send_message_queue		(const gchar *file,
+					 gchar **errstr);
 
 void procmsg_msginfo_set_flags		(MsgInfo *msginfo,
 					 MsgPermFlags perm_flags,

Index: send_message.c
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/sylpheed-claws/src/send_message.c,v
retrieving revision 1.17.2.30
retrieving revision 1.17.2.31
diff -u -d -r1.17.2.30 -r1.17.2.31
--- send_message.c	2006/06/02 16:48:40	1.17.2.30
+++ send_message.c	2006/06/12 17:08:18	1.17.2.31
@@ -607,7 +607,7 @@
 	if (log_msg)
 		log_warning("%s\n", log_msg);
 	if (err_msg) {
-		alertpanel_error_log("%s", err_msg);
+		log_error("%s", err_msg);
 		g_free(err_msg);
 	}
 }

Index: summaryview.c
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/sylpheed-claws/src/summaryview.c,v
retrieving revision 1.395.2.219
retrieving revision 1.395.2.220
diff -u -d -r1.395.2.219 -r1.395.2.220
--- summaryview.c	2006/06/12 16:05:55	1.395.2.219
+++ summaryview.c	2006/06/12 17:08:18	1.395.2.220
@@ -2892,7 +2892,7 @@
 					      summaryview->selected);
 	if (!msginfo) return;
 
-	compose_reedit(msginfo);
+	compose_reedit(msginfo, FALSE);
 }
 
 gboolean summary_step(SummaryView *summaryview, GtkScrollType type)

Index: toolbar.c
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/sylpheed-claws/src/toolbar.c,v
retrieving revision 1.43.2.46
retrieving revision 1.43.2.47
diff -u -d -r1.43.2.46 -r1.43.2.47
--- toolbar.c	2006/06/02 16:48:40	1.43.2.46
+++ toolbar.c	2006/06/12 17:08:19	1.43.2.47
@@ -2085,6 +2085,7 @@
 	GList *list;
 	gboolean found;
 	gboolean got_error = FALSE;
+	gchar *errstr = NULL;
 
 	if (prefs_common.work_offline)
 		if (alertpanel(_("Offline warning"), 
@@ -2120,13 +2121,23 @@
 
 		if (folder->queue) {
 			if (procmsg_send_queue(folder->queue, 
-					       prefs_common.savemsg) < 0)
+					       prefs_common.savemsg,
+					       &errstr) < 0)
 				got_error = TRUE;
 		}
 	}
-	if (got_error)
-		alertpanel_error(_("Some errors occurred while "
-				   "sending queued messages."));
+	if (got_error) {
+		if (!errstr)
+			alertpanel_error_log(_("Some errors occurred while "
+					   "sending queued messages."));
+		else {
+			gchar *tmp = g_strdup_printf(_("Some errors occurred "
+					"while sending queued messages:\n%s"), errstr);
+			g_free(errstr);
+			alertpanel_error_log(tmp);
+			g_free(tmp);
+		}
+	}
 }
 
 void compose_mail_cb(gpointer data, guint action, GtkWidget *widget)


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.