const gchar *text,
gint len,
Compose *compose);
-static void compose_generic_reply(MsgInfo *msginfo, gboolean quote,
+static Compose *compose_generic_reply(MsgInfo *msginfo, gboolean quote,
gboolean to_all, gboolean to_ml,
gboolean to_sender,
gboolean followup_and_reply_to,
{N_("/_Edit/Cu_t"), "<control>X", compose_cut_cb, 0, NULL},
{N_("/_Edit/_Copy"), "<control>C", compose_copy_cb, 0, NULL},
{N_("/_Edit/_Paste"), "<control>V", compose_paste_cb, 0, NULL},
+ {N_("/_Edit/Special paste"), NULL, NULL, 0, "<Branch>"},
{N_("/_Edit/Special paste/as _quotation"),
NULL, compose_paste_as_quote_cb, 0, NULL},
{N_("/_Edit/Special paste/_wrapped"),
} else {
if (mailto) {
compose_entry_append(compose, mailto, COMPOSE_NEWSGROUPS);
+ } else if (item) {
+ compose_entry_append(compose, item->path, COMPOSE_NEWSGROUPS);
}
/*
* CLAWS: just don't allow return receipt request, even if the user
if (prefs_common.auto_exteditor)
compose_exec_ext_editor(compose);
+ compose_set_title(compose);
return compose;
}
{
gchar *privacy = NULL;
+ g_return_if_fail(compose != NULL);
+ g_return_if_fail(account != NULL);
+
if (override_pref == FALSE && account->default_encrypt_reply == FALSE)
return;
}
}
-void compose_reply_mode(ComposeMode mode, GSList *msginfo_list, gchar *body)
+Compose *compose_reply_mode(ComposeMode mode, GSList *msginfo_list, gchar *body)
{
MsgInfo *msginfo;
guint list_len;
-
- g_return_if_fail(msginfo_list != NULL);
+ Compose *compose = NULL;
+ g_return_val_if_fail(msginfo_list != NULL, NULL);
msginfo = (MsgInfo*)g_slist_nth_data(msginfo_list, 0);
- g_return_if_fail(msginfo != NULL);
+ g_return_val_if_fail(msginfo != NULL, NULL);
list_len = g_slist_length(msginfo_list);
switch (mode) {
case COMPOSE_REPLY:
- compose_reply(msginfo, prefs_common.reply_with_quote,
+ compose = compose_reply(msginfo, prefs_common.reply_with_quote,
FALSE, prefs_common.default_reply_list, FALSE, body);
break;
case COMPOSE_REPLY_WITH_QUOTE:
- compose_reply(msginfo, TRUE, FALSE, prefs_common.default_reply_list, FALSE, body);
+ compose = compose_reply(msginfo, TRUE,
+ FALSE, prefs_common.default_reply_list, FALSE, body);
break;
case COMPOSE_REPLY_WITHOUT_QUOTE:
- compose_reply(msginfo, FALSE, FALSE, prefs_common.default_reply_list, FALSE, NULL);
+ compose = compose_reply(msginfo, FALSE,
+ FALSE, prefs_common.default_reply_list, FALSE, NULL);
break;
case COMPOSE_REPLY_TO_SENDER:
- compose_reply(msginfo, prefs_common.reply_with_quote,
+ compose = compose_reply(msginfo, prefs_common.reply_with_quote,
FALSE, FALSE, TRUE, body);
break;
case COMPOSE_FOLLOWUP_AND_REPLY_TO:
- compose_followup_and_reply_to(msginfo,
+ compose = compose_followup_and_reply_to(msginfo,
prefs_common.reply_with_quote,
FALSE, FALSE, body);
break;
case COMPOSE_REPLY_TO_SENDER_WITH_QUOTE:
- compose_reply(msginfo, TRUE, FALSE, FALSE, TRUE, body);
+ compose = compose_reply(msginfo, TRUE,
+ FALSE, FALSE, TRUE, body);
break;
case COMPOSE_REPLY_TO_SENDER_WITHOUT_QUOTE:
- compose_reply(msginfo, FALSE, FALSE, FALSE, TRUE, NULL);
+ compose = compose_reply(msginfo, FALSE,
+ FALSE, FALSE, TRUE, NULL);
break;
case COMPOSE_REPLY_TO_ALL:
- compose_reply(msginfo, prefs_common.reply_with_quote,
- TRUE, FALSE, FALSE, body);
+ compose = compose_reply(msginfo, prefs_common.reply_with_quote,
+ TRUE, FALSE, FALSE, body);
break;
case COMPOSE_REPLY_TO_ALL_WITH_QUOTE:
- compose_reply(msginfo, TRUE, TRUE, FALSE, FALSE, body);
+ compose = compose_reply(msginfo, TRUE,
+ TRUE, FALSE, FALSE, body);
break;
case COMPOSE_REPLY_TO_ALL_WITHOUT_QUOTE:
- compose_reply(msginfo, FALSE, TRUE, FALSE, FALSE, NULL);
+ compose = compose_reply(msginfo, FALSE,
+ TRUE, FALSE, FALSE, NULL);
break;
case COMPOSE_REPLY_TO_LIST:
- compose_reply(msginfo, prefs_common.reply_with_quote,
- FALSE, TRUE, FALSE, body);
+ compose = compose_reply(msginfo, prefs_common.reply_with_quote,
+ FALSE, TRUE, FALSE, body);
break;
case COMPOSE_REPLY_TO_LIST_WITH_QUOTE:
- compose_reply(msginfo, TRUE, FALSE, TRUE, FALSE, body);
+ compose = compose_reply(msginfo, TRUE,
+ FALSE, TRUE, FALSE, body);
break;
case COMPOSE_REPLY_TO_LIST_WITHOUT_QUOTE:
- compose_reply(msginfo, FALSE, FALSE, TRUE, FALSE, NULL);
+ compose = compose_reply(msginfo, FALSE,
+ FALSE, TRUE, FALSE, NULL);
break;
case COMPOSE_FORWARD:
if (prefs_common.forward_as_attachment) {
- compose_reply_mode(COMPOSE_FORWARD_AS_ATTACH, msginfo_list, body);
- return;
+ compose = compose_reply_mode(COMPOSE_FORWARD_AS_ATTACH, msginfo_list, body);
+ return compose;
} else {
- compose_reply_mode(COMPOSE_FORWARD_INLINE, msginfo_list, body);
- return;
+ compose = compose_reply_mode(COMPOSE_FORWARD_INLINE, msginfo_list, body);
+ return compose;
}
break;
case COMPOSE_FORWARD_INLINE:
/* check if we reply to more than one Message */
if (list_len == 1) {
- compose_forward(NULL, msginfo, FALSE, body, FALSE);
+ compose = compose_forward(NULL, msginfo, FALSE, body, FALSE);
break;
}
/* more messages FALL THROUGH */
case COMPOSE_FORWARD_AS_ATTACH:
- compose_forward_multiple(NULL, msginfo_list);
+ compose = compose_forward_multiple(NULL, msginfo_list);
break;
case COMPOSE_REDIRECT:
- compose_redirect(NULL, msginfo);
+ compose = compose_redirect(NULL, msginfo);
break;
default:
g_warning("compose_reply(): invalid Compose Mode: %d\n", mode);
}
+ return compose;
}
-void compose_reply(MsgInfo *msginfo, gboolean quote, gboolean to_all,
+Compose *compose_reply(MsgInfo *msginfo, gboolean quote, gboolean to_all,
gboolean to_ml, gboolean to_sender,
const gchar *body)
{
- compose_generic_reply(msginfo, quote, to_all, to_ml,
+ return compose_generic_reply(msginfo, quote, to_all, to_ml,
to_sender, FALSE, body);
}
-void compose_followup_and_reply_to(MsgInfo *msginfo, gboolean quote,
+Compose *compose_followup_and_reply_to(MsgInfo *msginfo, gboolean quote,
gboolean to_all,
gboolean to_sender,
const gchar *body)
{
- compose_generic_reply(msginfo, quote, to_all, FALSE,
+ return compose_generic_reply(msginfo, quote, to_all, FALSE,
to_sender, TRUE, body);
}
-static void compose_generic_reply(MsgInfo *msginfo, gboolean quote,
+static void compose_extract_original_charset(Compose *compose)
+{
+ MsgInfo *info = NULL;
+ if (compose->replyinfo) {
+ info = compose->replyinfo;
+ } else if (compose->fwdinfo) {
+ info = compose->fwdinfo;
+ } else if (compose->targetinfo) {
+ info = compose->targetinfo;
+ }
+ if (info) {
+ MimeInfo *mimeinfo = procmime_scan_message(info);
+ MimeInfo *partinfo = mimeinfo;
+ while (partinfo && partinfo->type != MIMETYPE_TEXT)
+ partinfo = procmime_mimeinfo_next(partinfo);
+ if (partinfo) {
+ compose->orig_charset =
+ g_strdup(procmime_mimeinfo_get_parameter(
+ partinfo, "charset"));
+ }
+ procmime_mimeinfo_free_all(mimeinfo);
+ }
+}
+
+static Compose *compose_generic_reply(MsgInfo *msginfo, gboolean quote,
gboolean to_all, gboolean to_ml,
gboolean to_sender,
gboolean followup_and_reply_to,
GtkTextIter iter;
int cursor_pos;
- 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);
account = account_get_reply_account(msginfo, prefs_common.reply_account_autosel);
- g_return_if_fail(account != NULL);
+ g_return_val_if_fail(account != NULL, NULL);
if (to_sender && account->protocol == A_NNTP &&
!followup_and_reply_to) {
if (!reply_account)
reply_account = compose_current_mail_account();
if (!reply_account)
- return;
+ return NULL;
} else
reply_account = account;
menu_set_sensitive(ifactory, "/Options/Remove references", TRUE);
compose->replyinfo = procmsg_msginfo_get_full_info(msginfo);
+
if (!compose->replyinfo)
compose->replyinfo = procmsg_msginfo_copy(msginfo);
-
+
+ compose_extract_original_charset(compose);
+
if (msginfo->folder && msginfo->folder->ret_rcpt)
menu_set_active(ifactory, "/Options/Request Return Receipt", TRUE);
g_free(folderidentifier);
}
- if (compose_parse_header(compose, msginfo) < 0) return;
+ if (compose_parse_header(compose, msginfo) < 0) return NULL;
compose_reply_set_entry(compose, msginfo, to_all, to_ml,
to_sender, followup_and_reply_to);
compose_show_first_last_header(compose, TRUE);
if (prefs_common.auto_exteditor)
compose_exec_ext_editor(compose);
+
+ compose_set_title(compose);
+ return compose;
}
#define INSERT_FW_HEADER(var, hdr) \
if (!compose->fwdinfo)
compose->fwdinfo = procmsg_msginfo_copy(msginfo);
+ compose_extract_original_charset(compose);
+
if (msginfo->subject && *msginfo->subject) {
gchar *buf, *buf2, *p;
g_free(folderidentifier);
}
+ compose_set_title(compose);
return compose;
}
GtkTextIter iter;
GSList *msginfo;
gchar *msgfile;
-
+ gboolean single_mail = TRUE;
+
g_return_val_if_fail(msginfo_list != NULL, NULL);
+ if (g_slist_length(msginfo_list) > 1)
+ single_mail = FALSE;
+
for (msginfo = msginfo_list; msginfo != NULL; msginfo = msginfo->next)
if (((MsgInfo *)msginfo->data)->folder == NULL)
return NULL;
"message/rfc822");
g_free(msgfile);
}
+
+ if (single_mail) {
+ MsgInfo *info = (MsgInfo *)msginfo_list->data;
+ if (info->subject && *info->subject) {
+ gchar *buf, *buf2, *p;
+
+ buf = p = g_strdup(info->subject);
+ p += subject_get_prefix_length(p);
+ memmove(buf, p, strlen(p) + 1);
+
+ buf2 = g_strdup_printf("Fw: %s", buf);
+ gtk_entry_set_text(GTK_ENTRY(compose->subject_entry), buf2);
+
+ g_free(buf);
+ g_free(buf2);
+ }
+ } else {
+ gtk_entry_set_text(GTK_ENTRY(compose->subject_entry),
+ _("Fw: multiple emails"));
+ }
if (account->auto_sig)
compose_insert_sig(compose, FALSE);
gtk_widget_grab_focus(compose->header_last->entry);
+ compose_set_title(compose);
return compose;
}
/* check sig separator */
if (!strcmp(gtk_text_iter_get_text(&start, &end_iter),
compose->account->sig_sep)) {
+ gchar *tmp = NULL;
/* check end of line (\n) */
gtk_text_buffer_get_iter_at_offset(textbuf, &start,
start_pos+strlen(compose->account->sig_sep));
gtk_text_buffer_get_iter_at_offset(textbuf, &end_iter,
start_pos+strlen(compose->account->sig_sep)+1);
-
- if (!strcmp(gtk_text_iter_get_text(&start, &end_iter),"\n"));
+ tmp = gtk_text_iter_get_text(&start, &end_iter);
+ if (!strcmp(tmp,"\n")) {
+ g_free(tmp);
return TRUE;
-
+ }
+ g_free(tmp);
}
}
compose->targetinfo = procmsg_msginfo_copy(msginfo);
+ compose_extract_original_charset(compose);
+
if (folder_has_parent_of_type(msginfo->folder, F_QUEUE) ||
folder_has_parent_of_type(msginfo->folder, F_DRAFT)) {
gchar queueheader_buf[BUFFSIZE];
if (prefs_common.auto_exteditor)
compose_exec_ext_editor(compose);
+ compose_set_title(compose);
}
Compose *compose_redirect(PrefsAccount *account, MsgInfo *msginfo)
gtk_widget_set_sensitive(compose->toolbar->linewrap_current_btn, FALSE);
gtk_widget_set_sensitive(compose->toolbar->linewrap_all_btn, FALSE);
+ compose_set_title(compose);
return compose;
}
g_return_if_fail(msginfo != NULL);
if (compose->account->protocol != A_NNTP) {
- if (!compose->replyto && to_ml && compose->ml_post
- && !(msginfo->folder && msginfo->folder->prefs->enable_default_reply_to))
+ if (to_ml && compose->ml_post
+ && !(msginfo->folder &&
+ msginfo->folder->prefs->enable_default_reply_to)) {
compose_entry_append(compose,
compose->ml_post,
COMPOSE_TO);
+ if (compose->replyto) {
+ gchar *tmp1 = NULL, *tmp2 = NULL;
+ Xstrdup_a(tmp1, compose->replyto, return);
+ if (compose->ml_post)
+ Xstrdup_a(tmp2, compose->ml_post, return);
+ extract_address(tmp1);
+ extract_address(tmp2);
+ if (tmp1 && tmp2 && strcmp(tmp1, tmp2))
+ compose_entry_append(compose,
+ compose->replyto,
+ COMPOSE_CC);
+ }
+ }
else if (!(to_all || to_sender)
&& msginfo->folder
&& msginfo->folder->prefs->enable_default_reply_to) {
compose_entry_append(compose,
msginfo->folder->prefs->default_reply_to,
COMPOSE_TO);
- } else
- compose_entry_append(compose,
+ compose_entry_mark_default_to(compose,
+ msginfo->folder->prefs->default_reply_to);
+ } else {
+ gchar *tmp1 = NULL;
+ Xstrdup_a(tmp1, msginfo->from, return);
+ extract_address(tmp1);
+ if (to_all || to_sender ||
+ !account_find_from_address(tmp1))
+ compose_entry_append(compose,
(compose->replyto && !to_sender)
- ? compose->replyto :
- msginfo->from ? msginfo->from : "",
- COMPOSE_TO);
+ ? compose->replyto :
+ msginfo->from ? msginfo->from : "",
+ COMPOSE_TO);
+ else if (!to_all && !to_sender) {
+ /* reply to the last list of recipients */
+ compose_entry_append(compose,
+ msginfo->to ? msginfo->to : "",
+ COMPOSE_TO);
+ compose_entry_append(compose,
+ msginfo->cc ? msginfo->cc : "",
+ COMPOSE_CC);
+ }
+ }
} else {
if (to_sender || (compose->followup_to &&
!strncmp(compose->followup_to, "poster", 6)))
{
gchar *str;
gchar *edited;
-
+ gchar *subject;
+
edited = compose->modified ? _(" [Edited]") : "";
- if (compose->account && compose->account->address)
+
+ subject = gtk_editable_get_chars(
+ GTK_EDITABLE(compose->subject_entry), 0, -1);
+
+ if (subject && strlen(subject))
+ str = g_strdup_printf(_("%s - Compose message%s"),
+ subject, edited);
+ else if (compose->account && compose->account->address)
str = g_strdup_printf(_("%s - Compose message%s"),
compose->account->address, edited);
else
str = g_strdup_printf(_("Compose message%s"), edited);
gtk_window_set_title(GTK_WINDOW(compose->window), str);
g_free(str);
+ g_free(subject);
}
/**
return recipient_found;
}
+static gboolean compose_check_for_set_recipients(Compose *compose)
+{
+ if (compose->account->set_autocc && compose->account->auto_cc) {
+ gboolean found_other = FALSE;
+ GSList *list;
+ /* search header entries for to and newsgroup entries */
+ for (list = compose->header_list; list; list = list->next) {
+ gchar *entry;
+ gchar *header;
+ entry = gtk_editable_get_chars(GTK_EDITABLE(((ComposeHeaderEntry *)list->data)->entry), 0, -1);
+ header = gtk_editable_get_chars(GTK_EDITABLE(GTK_COMBO(((ComposeHeaderEntry *)list->data)->combo)->entry), 0, -1);
+ g_strstrip(entry);
+ if (strcmp(entry, compose->account->auto_cc)
+ || strcmp(header, (prefs_common.trans_hdr ? gettext("Cc:") : "Cc:"))) {
+ found_other = TRUE;
+ g_free(entry);
+ break;
+ }
+ g_free(entry);
+ g_free(header);
+ }
+ if (!found_other) {
+ AlertValue aval;
+ aval = alertpanel(_("Send"),
+ _("The only recipient is the default CC address. Send anyway?"),
+ GTK_STOCK_YES, GTK_STOCK_NO, NULL);
+ if (aval != G_ALERTDEFAULT)
+ return FALSE;
+ }
+ }
+ if (compose->account->set_autobcc && compose->account->auto_bcc) {
+ gboolean found_other = FALSE;
+ GSList *list;
+ /* search header entries for to and newsgroup entries */
+ for (list = compose->header_list; list; list = list->next) {
+ gchar *entry;
+ gchar *header;
+ entry = gtk_editable_get_chars(GTK_EDITABLE(((ComposeHeaderEntry *)list->data)->entry), 0, -1);
+ header = gtk_editable_get_chars(GTK_EDITABLE(GTK_COMBO(((ComposeHeaderEntry *)list->data)->combo)->entry), 0, -1);
+ g_strstrip(entry);
+ if (strcmp(entry, compose->account->auto_cc)
+ || strcmp(header, (prefs_common.trans_hdr ? gettext("Bcc:") : "Bcc:"))) {
+ found_other = TRUE;
+ g_free(entry);
+ break;
+ }
+ g_free(entry);
+ g_free(header);
+ }
+ if (!found_other) {
+ AlertValue aval;
+ aval = alertpanel(_("Send"),
+ _("The only recipient is the default BCC address. Send anyway?"),
+ GTK_STOCK_YES, GTK_STOCK_NO, NULL);
+ if (aval != G_ALERTDEFAULT)
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+
static gboolean compose_check_entries(Compose *compose, gboolean check_subject)
{
const gchar *str;
return FALSE;
}
+ if (compose_check_for_set_recipients(compose) == FALSE) {
+ return FALSE;
+ }
+
str = gtk_entry_get_text(GTK_ENTRY(compose->subject_entry));
if (*str == '\0' && check_subject == TRUE) {
AlertValue aval;
out_codeset = CS_US_ASCII;
encoding = ENC_7BIT;
} else {
- const gchar *src_codeset;
+ const gchar *src_codeset = CS_INTERNAL;
out_codeset = conv_get_charset_str(compose->out_encoding);
- if (!out_codeset)
+
+ if (!out_codeset) {
+ gchar *test_conv_global_out = NULL;
+ gchar *test_conv_reply = NULL;
+
+ /* automatic mode. be automatic. */
+ codeconv_set_strict(TRUE);
+
out_codeset = conv_get_outgoing_charset_str();
+ if (out_codeset) {
+ debug_print("trying to convert to %s\n", out_codeset);
+ test_conv_global_out = conv_codeset_strdup(chars, src_codeset, out_codeset);
+ }
+
+ if (!test_conv_global_out && compose->orig_charset) {
+ out_codeset = compose->orig_charset;
+ debug_print("failure; trying to convert to %s\n", out_codeset);
+ test_conv_reply = conv_codeset_strdup(chars, src_codeset, out_codeset);
+ }
+
+ if (!test_conv_global_out && !test_conv_reply) {
+ /* we're lost */
+ out_codeset = CS_INTERNAL;
+ debug_print("finally using %s\n", out_codeset);
+ }
+ g_free(test_conv_global_out);
+ g_free(test_conv_reply);
+ codeconv_set_strict(FALSE);
+ }
if (!g_ascii_strcasecmp(out_codeset, CS_US_ASCII))
out_codeset = CS_ISO_8859_1;
else
encoding = procmime_get_encoding_for_charset(out_codeset);
- src_codeset = CS_INTERNAL;
- /* if current encoding is US-ASCII, set it the same as
- outgoing one to prevent code conversion failure */
- if (!g_ascii_strcasecmp(src_codeset, CS_US_ASCII))
- src_codeset = out_codeset;
-
debug_print("src encoding = %s, out encoding = %s, transfer encoding = %s\n",
src_codeset, out_codeset, procmime_get_encoding_str(encoding));
AlertValue aval;
gchar *msg;
- msg = g_strdup_printf(_("Can't convert the character encoding of the message from\n"
- "%s to %s.\n"
- "Send it anyway?"), src_codeset, out_codeset);
+ msg = g_strdup_printf(_("Can't convert the character encoding of the message \n"
+ "to the specified %s charset.\n"
+ "Send it as %s?"), out_codeset, src_codeset);
aval = alertpanel_full(_("Error"), msg, GTK_STOCK_YES, GTK_STOCK_NO, NULL, FALSE,
NULL, ALERT_ERROR, G_ALERTALTERNATE);
- g_free(msg);
+ g_free(msg);
if (aval != G_ALERTDEFAULT) {
g_free(chars);
/* protect trailing spaces when signing message */
if (action == COMPOSE_WRITE_FOR_SEND && compose->use_signing &&
privacy_system_can_sign(compose->privacy_system)) {
- if (encoding == ENC_7BIT)
- encoding = ENC_QUOTED_PRINTABLE;
- else if (encoding == ENC_8BIT)
- encoding = ENC_BASE64;
+ encoding = ENC_QUOTED_PRINTABLE;
}
/* check for line length limit */
/* append attachment parts */
if (compose_use_attach(compose)) {
MimeInfo *mimempart;
-
+ gchar *boundary = NULL;
mimempart = procmime_mimeinfo_new();
mimempart->content = MIMECONTENT_EMPTY;
mimempart->type = MIMETYPE_MULTIPART;
mimempart->subtype = g_strdup("mixed");
+
+ do {
+ if (boundary)
+ g_free(boundary);
+ boundary = generate_mime_boundary(NULL);
+ } while (strstr(buf, boundary) != NULL);
+
g_hash_table_insert(mimempart->typeparameters, g_strdup("boundary"),
- generate_mime_boundary(NULL));
+ boundary);
mimetext->disposition = DISPOSITIONTYPE_INLINE;
gint header_len, gboolean addr_field)
{
gchar *tmpstr = NULL;
-
+ const gchar *out_codeset = NULL;
+
g_return_if_fail(src != NULL);
g_return_if_fail(dest != NULL);
g_free(tmpstr);
tmpstr = mybuf;
}
+
+ codeconv_set_strict(TRUE);
conv_encode_header_full(dest, len, tmpstr, header_len, addr_field,
conv_get_charset_str(compose->out_encoding));
+ codeconv_set_strict(FALSE);
+
+ if (!dest || *dest == '\0') {
+ gchar *test_conv_global_out = NULL;
+ gchar *test_conv_reply = NULL;
+
+ /* automatic mode. be automatic. */
+ codeconv_set_strict(TRUE);
+
+ out_codeset = conv_get_outgoing_charset_str();
+ if (out_codeset) {
+ debug_print("trying to convert to %s\n", out_codeset);
+ test_conv_global_out = conv_codeset_strdup(src, CS_INTERNAL, out_codeset);
+ }
+
+ if (!test_conv_global_out && compose->orig_charset) {
+ out_codeset = compose->orig_charset;
+ debug_print("failure; trying to convert to %s\n", out_codeset);
+ test_conv_reply = conv_codeset_strdup(src, CS_INTERNAL, out_codeset);
+ }
+
+ if (!test_conv_global_out && !test_conv_reply) {
+ /* we're lost */
+ out_codeset = CS_INTERNAL;
+ debug_print("finally using %s\n", out_codeset);
+ }
+ g_free(test_conv_global_out);
+ g_free(test_conv_reply);
+ conv_encode_header_full(dest, len, tmpstr, header_len, addr_field,
+ out_codeset);
+ codeconv_set_strict(FALSE);
+ }
g_free(tmpstr);
}
GList *alist = amenu->next;
systemid = g_object_get_data(G_OBJECT(amenu->data), "privacy_system");
- if (systemid != NULL)
+ if (systemid != NULL) {
if (strcmp(systemid, compose->privacy_system) == 0) {
menuitem = GTK_WIDGET(amenu->data);
can_encrypt = privacy_system_can_encrypt(systemid);
found = TRUE;
break;
- }
+ }
+ } else if (strlen(compose->privacy_system) == 0) {
+ menuitem = GTK_WIDGET(amenu->data);
+
+ can_sign = FALSE;
+ can_encrypt = FALSE;
+ found = TRUE;
+ break;
+ }
amenu = alist;
}
alertpanel_warning(tmp);
g_free(tmp);
}
- }
+ }
menu_set_sensitive(ifactory, "/Options/Sign", can_sign);
menu_set_sensitive(ifactory, "/Options/Encrypt", can_encrypt);
g_free(compose->exteditor_file);
+ g_free(compose->orig_charset);
+
+ g_free(compose->privacy_system);
+
if (addressbook_get_target_compose() == compose)
addressbook_set_target_compose(NULL);
if (compose->modified) {
val = alertpanel(_("Discard message"),
_("This message has been modified. Discard it?"),
- _("Discard"), _("Save to Drafts"), GTK_STOCK_CANCEL);
+ _("_Discard"), _("_Save to Drafts"), GTK_STOCK_CANCEL);
switch (val) {
case G_ALERTDEFAULT:
static void compose_changed_cb(GtkTextBuffer *textbuf, Compose *compose)
{
- if (compose->modified == FALSE) {
- compose->modified = TRUE;
- compose_set_title(compose);
- }
+ compose->modified = TRUE;
+ compose_set_title(compose);
}
static void compose_wrap_cb(gpointer data, guint action, GtkWidget *widget)
static void activate_privacy_system(Compose *compose, PrefsAccount *account, gboolean warn)
{
g_free(compose->privacy_system);
+
compose->privacy_system = g_strdup(account->default_privacy_system);
compose_update_privacy_system_menu_item(compose, warn);
}
gchar *body;
GSList *new_msglist = NULL;
MsgInfo *tmp_msginfo = NULL;
-
+ gboolean originally_enc = FALSE;
+ Compose *compose = NULL;
+
g_return_if_fail(msgview != NULL);
g_return_if_fail(msginfo_list != NULL);
if (mimeinfo != NULL && mimeinfo->type == MIMETYPE_MESSAGE &&
!g_ascii_strcasecmp(mimeinfo->subtype, "rfc822")) {
-
tmp_msginfo = procmsg_msginfo_new_from_mimeinfo(
orig_msginfo, mimeinfo);
if (tmp_msginfo != NULL) {
new_msglist = g_slist_append(NULL, tmp_msginfo);
+ if (procmime_msginfo_is_encrypted(orig_msginfo)) {
+ originally_enc = TRUE;
+ }
}
}
}
body = messageview_get_selection(msgview);
if (new_msglist) {
- compose_reply_mode((ComposeMode)action, new_msglist, body);
+ compose = compose_reply_mode((ComposeMode)action, new_msglist, body);
procmsg_msginfo_free(tmp_msginfo);
g_slist_free(new_msglist);
} else
- compose_reply_mode((ComposeMode)action, msginfo_list, body);
+ compose = compose_reply_mode((ComposeMode)action, msginfo_list, body);
+
+ if (originally_enc) {
+ compose_force_encryption(compose, compose->account, FALSE);
+ }
g_free(body);
}