static void set_charset_cb (gpointer data,
guint action,
GtkWidget *widget);
+static void set_decode_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
static void view_source_cb (gpointer data,
guint action,
GtkWidget *widget);
{N_("/_View/_Code set/7bit ascii (US-ASC_II)"),
CODESET_ACTION(C_US_ASCII)},
-#if HAVE_ICONV
{N_("/_View/_Code set/Unicode (_UTF-8)"),
CODESET_ACTION(C_UTF_8)},
CODESET_SEPARATOR,
-#endif
{N_("/_View/_Code set/Western European (ISO-8859-_1)"),
CODESET_ACTION(C_ISO_8859_1)},
{N_("/_View/_Code set/Western European (ISO-8859-15)"),
CODESET_ACTION(C_ISO_8859_15)},
CODESET_SEPARATOR,
-#if HAVE_ICONV
{N_("/_View/_Code set/Central European (ISO-8859-_2)"),
CODESET_ACTION(C_ISO_8859_2)},
CODESET_SEPARATOR,
{N_("/_View/_Code set/Cyrillic (Windows-1251)"),
CODESET_ACTION(C_CP1251)},
CODESET_SEPARATOR,
-#endif
{N_("/_View/_Code set/Japanese (ISO-2022-_JP)"),
CODESET_ACTION(C_ISO_2022_JP)},
-#if HAVE_ICONV
{N_("/_View/_Code set/Japanese (ISO-2022-JP-2)"),
CODESET_ACTION(C_ISO_2022_JP_2)},
-#endif
{N_("/_View/_Code set/Japanese (_EUC-JP)"),
CODESET_ACTION(C_EUC_JP)},
{N_("/_View/_Code set/Japanese (_Shift__JIS)"),
CODESET_ACTION(C_SHIFT_JIS)},
-#if HAVE_ICONV
CODESET_SEPARATOR,
{N_("/_View/_Code set/Simplified Chinese (_GB2312)"),
CODESET_ACTION(C_GB2312)},
CODESET_ACTION(C_TIS_620)},
{N_("/_View/_Code set/Thai (Windows-874)"),
CODESET_ACTION(C_WINDOWS_874)},
-#endif
#undef CODESET_SEPARATOR
#undef CODESET_ACTION
+#define DECODE_SEPARATOR \
+ {N_("/_View/Decode/---"), NULL, NULL, 0, "<Separator>"}
+#define DECODE_ACTION(action) \
+ NULL, set_decode_cb, action, "/View/Decode/Auto detect"
+ {N_("/_View/Decode"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_View/Decode/_Auto detect"),
+ NULL, set_decode_cb, 0, "<RadioItem>"},
+ {N_("/_View/Decode/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_View/Decode/_8bit"), DECODE_ACTION(ENC_8BIT)},
+ {N_("/_View/Decode/_Quoted printable"), DECODE_ACTION(ENC_QUOTED_PRINTABLE)},
+ {N_("/_View/Decode/_Base64"), DECODE_ACTION(ENC_BASE64)},
+ {N_("/_View/Decode/_Uuencode"), DECODE_ACTION(ENC_X_UUENCODE)},
+
+#undef DECODE_SEPARATOR
+#undef DECODE_ACTION
+
{N_("/_View/---"), NULL, NULL, 0, "<Separator>"},
{N_("/_View/Mess_age source"), NULL, view_source_cb, 0, NULL},
{N_("/_View/Show all _headers"),NULL, show_all_header_cb, 0, "<ToggleItem>"},
fprintf(fp, "Subject: Disposition notification: %s\n", buf);
/* Message ID */
- generate_msgid(account->address, buf, sizeof buf);
+ generate_msgid(buf, sizeof(buf));
fprintf(fp, "Message-ID: <%s>\n", buf);
if (fclose(fp) == EOF) {
if (messageview->msginfo != msginfo) {
procmsg_msginfo_free(messageview->msginfo);
messageview->msginfo = procmsg_msginfo_get_full_info(msginfo);
+ if (!messageview->msginfo)
+ messageview->msginfo = procmsg_msginfo_copy(msginfo);
}
headerview_show(messageview->headerview, messageview->msginfo);
else
noticeview_hide(messageview->noticeview);
+ mimeinfo = procmime_mimeinfo_next(mimeinfo);
+ if (mimeinfo && (mimeinfo->type != MIMETYPE_TEXT ||
+ strcmp(mimeinfo->subtype, "plain"))) {
+ mimeview_show_part(messageview->mimeview,mimeinfo);
+ }
+
g_free(file);
return 0;
{
gchar *filename = NULL;
MsgInfo *msginfo;
- gchar *src, *dest;
+ gchar *src, *dest, *tmp;
if (!messageview->msginfo) return;
msginfo = messageview->msginfo;
aval = alertpanel(_("Overwrite"),
_("Overwrite existing file?"),
- _("OK"), _("Cancel"), NULL);
+ GTK_STOCK_OK, GTK_STOCK_CANCEL, NULL);
if (G_ALERTDEFAULT != aval) return;
}
src = procmsg_get_message_file(msginfo);
if (copy_file(src, dest, TRUE) < 0) {
- alertpanel_error(_("Can't save the file `%s'."),
- g_basename(dest));
+ tmp = g_path_get_basename(dest);
+ alertpanel_error(_("Can't save the file `%s'."), tmp);
+ g_free(tmp);
}
+ g_free(dest);
g_free(src);
}
noticeview_set_text(noticeview, _("This message asks for a return receipt."));
noticeview_set_button_text(noticeview, _("Send receipt"));
noticeview_set_button_press_callback(noticeview,
- GTK_SIGNAL_FUNC(return_receipt_send_clicked),
+ G_CALLBACK(return_receipt_send_clicked),
(gpointer) msginfo);
noticeview_show(noticeview);
}
g_free(text);
noticeview_set_button_text(noticeview, button1);
noticeview_set_button_press_callback(noticeview,
- GTK_SIGNAL_FUNC(button1_cb), (gpointer) msginfo);
+ G_CALLBACK(button1_cb), (gpointer) msginfo);
noticeview_set_2ndbutton_text(noticeview, button2);
noticeview_set_2ndbutton_press_callback(noticeview,
- GTK_SIGNAL_FUNC(button2_cb), (gpointer) msginfo);
+ G_CALLBACK(button2_cb), (gpointer) msginfo);
noticeview_show(noticeview);
}
}
}
+static void set_decode_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ MessageView *messageview = (MessageView *)data;
+ if (GTK_CHECK_MENU_ITEM(widget)->active) {
+ messageview->forced_encoding = (EncodingType)action;
+
+ messageview_show(messageview, messageview->msginfo, FALSE);
+
+ debug_print("forced encoding: %d\n", action);
+ }
+}
+
+
static void view_source_cb(gpointer data, guint action, GtkWidget *widget)
{
MessageView *messageview = (MessageView *)data;
static void reply_cb(gpointer data, guint action, GtkWidget *widget)
{
MessageView *messageview = (MessageView *)data;
- GSList *mlist = NULL;
+ GSList *msginfo_list = NULL;
MsgInfo *msginfo;
- gchar *text = NULL;
- ComposeMode mode = (ComposeMode)action;
- TextView *textview;
-
- msginfo = messageview->msginfo;
- mlist = g_slist_append(NULL, msginfo);
-
- textview = messageview_get_current_textview(messageview);
- text = gtkut_editable_get_selection
- (GTK_EDITABLE(textview->text));
- if (text && *text == '\0') {
- g_free(text);
- text = NULL;
- }
- switch (mode) {
- case COMPOSE_REPLY:
- compose_reply(msginfo, prefs_common.reply_with_quote,
- FALSE, prefs_common.default_reply_list, FALSE, text);
- break;
- case COMPOSE_REPLY_WITH_QUOTE:
- compose_reply(msginfo, TRUE, FALSE, prefs_common.default_reply_list, FALSE, text);
- break;
- case COMPOSE_REPLY_WITHOUT_QUOTE:
- 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,
- FALSE, FALSE, TRUE, text);
- break;
- case COMPOSE_FOLLOWUP_AND_REPLY_TO:
- compose_followup_and_reply_to(msginfo,
- prefs_common.reply_with_quote,
- FALSE, FALSE, text);
- break;
- case COMPOSE_REPLY_TO_SENDER_WITH_QUOTE:
- compose_reply(msginfo, TRUE, FALSE, FALSE, TRUE, text);
- break;
- case COMPOSE_REPLY_TO_SENDER_WITHOUT_QUOTE:
- 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, text);
- break;
- case COMPOSE_REPLY_TO_ALL_WITH_QUOTE:
- compose_reply(msginfo, TRUE, TRUE, FALSE, FALSE, text);
- break;
- case COMPOSE_REPLY_TO_ALL_WITHOUT_QUOTE:
- 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, text);
- break;
- case COMPOSE_REPLY_TO_LIST_WITH_QUOTE:
- compose_reply(msginfo, TRUE, FALSE, TRUE, FALSE, text);
- break;
- case COMPOSE_REPLY_TO_LIST_WITHOUT_QUOTE:
- 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, mlist, text);
- return;
- } else {
- compose_reply_mode(COMPOSE_FORWARD_INLINE, mlist, text);
- return;
- }
- break;
- case COMPOSE_FORWARD_INLINE:
- compose_forward(NULL, msginfo, FALSE, text, FALSE);
- break;
- case COMPOSE_FORWARD_AS_ATTACH:
- compose_forward_multiple(NULL, mlist);
- break;
- case COMPOSE_REDIRECT:
- compose_redirect(NULL, msginfo);
- break;
- default:
- g_warning("compose_reply(): invalid Compose Mode: %d\n", mode);
- }
+ g_return_if_fail(messageview->msginfo);
- /* summary_set_marks_selected(summaryview); */
- g_free(text);
- g_slist_free(mlist);
+ msginfo_list = g_slist_append(msginfo_list, messageview->msginfo);
+ compose_reply_from_messageview(messageview, msginfo_list, action);
+ g_slist_free(msginfo_list);
}
static void reedit_cb(gpointer data, guint action, GtkWidget *widget)
GtkItemFactory *ifactory;
GtkWidget *menuitem;
- if (!messageview && !messageview->new_window)
+ if (!messageview || !messageview->new_window)
return;
/* do some smart things */
if (!messageview->menubar) return;