#include "menu.h"
#include "about.h"
#include "filesel.h"
+#include "foldersel.h"
#include "sourcewindow.h"
#include "addressbook.h"
#include "alertpanel.h"
#include "inc.h"
#include "log.h"
#include "combobox.h"
+#include "printing.h"
static GList *messageview_list = NULL;
static void save_as_cb (gpointer data,
guint action,
GtkWidget *widget);
+#if GTK_CHECK_VERSION(2,10,0) && !defined(USE_GNOMEPRINT)
+static void page_setup_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+#endif
static void print_cb (gpointer data,
guint action,
GtkWidget *widget);
guint action,
GtkWidget *widget);
+static void prev_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void next_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void prev_unread_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void next_unread_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void prev_new_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void next_new_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void prev_marked_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void next_marked_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void prev_labeled_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void next_labeled_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void last_read_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void parent_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void goto_unread_folder_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+static void goto_folder_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+
static void set_charset_cb (gpointer data,
guint action,
GtkWidget *widget);
{
{N_("/_File"), NULL, NULL, 0, "<Branch>"},
{N_("/_File/_Save as..."), "<control>S", save_as_cb, 0, NULL},
+#if GTK_CHECK_VERSION(2,10,0) && !defined(USE_GNOMEPRINT)
+ {N_("/_File/Page setup..."), NULL, page_setup_cb, 0, NULL},
+#endif
{N_("/_File/_Print..."), "<control>P", print_cb, 0, NULL},
{N_("/_File/---"), NULL, NULL, 0, "<Separator>"},
{N_("/_File/_Close"), "<control>W", close_cb, 0, NULL},
"<control>F", search_cb, 0, NULL},
{N_("/_View"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_View/_Go to"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_View/_Go to/_Previous message"), "P", prev_cb, 0, NULL},
+ {N_("/_View/_Go to/_Next message"), "N", next_cb, 0, NULL},
+ {N_("/_View/_Go to/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_View/_Go to/P_revious unread message"),
+ "<shift>P", prev_unread_cb, 0, NULL},
+ {N_("/_View/_Go to/N_ext unread message"),
+ "<shift>N", next_unread_cb, 0, NULL},
+ {N_("/_View/_Go to/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_View/_Go to/Previous ne_w message"), NULL, prev_new_cb, 0, NULL},
+ {N_("/_View/_Go to/Ne_xt new message"), NULL, next_new_cb, 0, NULL},
+ {N_("/_View/_Go to/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_View/_Go to/Previous _marked message"),
+ NULL, prev_marked_cb, 0, NULL},
+ {N_("/_View/_Go to/Next m_arked message"),
+ NULL, next_marked_cb, 0, NULL},
+ {N_("/_View/_Go to/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_View/_Go to/Previous _labeled message"),
+ NULL, prev_labeled_cb, 0, NULL},
+ {N_("/_View/_Go to/Next la_beled message"),
+ NULL, next_labeled_cb, 0, NULL},
+ {N_("/_View/_Go to/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_View/_Go to/Last read message"),
+ NULL, last_read_cb, 0, NULL},
+ {N_("/_View/_Go to/Parent message"),
+ "<control>Up", parent_cb, 0, NULL},
+ {N_("/_View/_Go to/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_View/_Go to/Next unread _folder"), "<shift>G", goto_unread_folder_cb, 0, NULL},
+ {N_("/_View/_Go to/_Other folder..."), "G", goto_folder_cb, 0, NULL},
+ {N_("/_View/---"), NULL, NULL, 0, "<Separator>"},
#define ENC_SEPARATOR \
{N_("/_View/Character _encoding/---"), NULL, NULL, 0, "<Separator>"}
addrp = addr;
/* write queue headers */
- fprintf(fp, "AF:\n");
- fprintf(fp, "NF:0\n");
- fprintf(fp, "PS:10\n");
- fprintf(fp, "SRH:1\n");
- fprintf(fp, "SFN:\n");
- fprintf(fp, "DSR:\n");
- fprintf(fp, "MID:\n");
- fprintf(fp, "CFG:\n");
- fprintf(fp, "PT:0\n");
- fprintf(fp, "S:%s\n", account->address);
- fprintf(fp, "RQ:\n");
- if (account->smtp_server)
- fprintf(fp, "SSV:%s\n", account->smtp_server);
- else
- fprintf(fp, "SSV:\n");
- fprintf(fp, "SSH:\n");
- fprintf(fp, "R:<%s>\n", addrp);
-
+ if (fprintf(fp, "AF:\n"
+ "NF:0\n"
+ "PS:10\n"
+ "SRH:1\n"
+ "SFN:\n"
+ "DSR:\n"
+ "MID:\n"
+ "CFG:\n"
+ "PT:0\n"
+ "S:%s\n"
+ "RQ:\n"
+ "SSV:%s\n"
+ "SSH:\n"
+ "R:<%s>\n",
+ account->address,
+ account->smtp_server?account->smtp_server:"",
+ addrp) < 0) {
+ g_free(addrp);
+ fclose(fp);
+ g_unlink(tmp);
+ return -1;
+ }
+
g_free(addrp);
/* check whether we need to save the message */
outbox = NULL;
if (outbox) {
path = folder_item_get_identifier(outbox);
- fprintf(fp, "SCF:%s\n", path);
+ if (fprintf(fp, "SCF:%s\n", path) < 0) {
+ g_free(path);
+ fclose(fp);
+ g_unlink(tmp);
+ return -1;
+ }
g_free(path);
}
- fprintf(fp, "X-Claws-End-Special-Headers: 1\n");
-
+ if (fprintf(fp, "X-Claws-End-Special-Headers: 1\n") < 0) {
+ fclose(fp);
+ g_unlink(tmp);
+ return -1;
+ }
+
/* Date */
get_rfc822_date(buf, sizeof(buf));
- fprintf(fp, "Date: %s\n", buf);
+ if (fprintf(fp, "Date: %s\n", buf) < 0) {
+ fclose(fp);
+ g_unlink(tmp);
+ return -1;
+ }
/* From */
if (account->name && *account->name) {
notification_convert_header
(buf, sizeof(buf), account->name,
strlen("From: "));
- fprintf(fp, "From: %s <%s>\n", buf, account->address);
+ if (fprintf(fp, "From: %s <%s>\n", buf, account->address) < 0) {
+ fclose(fp);
+ g_unlink(tmp);
+ return -1;
+ }
} else
- fprintf(fp, "From: %s\n", account->address);
+ if (fprintf(fp, "From: %s\n", account->address) < 0) {
+ fclose(fp);
+ g_unlink(tmp);
+ return -1;
+ }
+
- fprintf(fp, "To: %s\n", to);
+ if (fprintf(fp, "To: %s\n", to) < 0) {
+ fclose(fp);
+ g_unlink(tmp);
+ return -1;
+ }
/* Subject */
notification_convert_header(buf, sizeof(buf), msginfo->subject,
strlen("Subject: "));
- fprintf(fp, "Subject: Disposition notification: %s\n", buf);
+ if (fprintf(fp, "Subject: Disposition notification: %s\n", buf) < 0) {
+ fclose(fp);
+ g_unlink(tmp);
+ return -1;
+ }
/* Message ID */
+ if (account->set_domain && account->domain) {
+ g_snprintf(buf, sizeof(buf), "%s", account->domain);
+ } else if (!strncmp(get_domain_name(), "localhost", strlen("localhost"))) {
+ g_snprintf(buf, sizeof(buf), "%s",
+ strchr(account->address, '@') ?
+ strchr(account->address, '@')+1 :
+ account->address);
+ } else {
+ g_snprintf(buf, sizeof(buf), "%s", "");
+ }
generate_msgid(buf, sizeof(buf));
- fprintf(fp, "Message-ID: <%s>\n", buf);
+ if (fprintf(fp, "Message-ID: <%s>\n", buf) < 0) {
+ fclose(fp);
+ g_unlink(tmp);
+ return -1;
+ }
+
if (fclose(fp) == EOF) {
FILE_OP_ERROR(tmp, "fclose");
procmsg_spam_can_learn());
}
messageview->updating = TRUE;
- mimeinfo = procmime_scan_message(msginfo);
+
+ file = procmsg_get_message_file_path(msginfo);
+ if (!file) {
+ g_warning("can't get message file path.\n");
+ textview_show_error(messageview->mimeview->textview);
+ return -1;
+ }
+
+ if (!folder_has_parent_of_type(msginfo->folder, F_QUEUE) &&
+ !folder_has_parent_of_type(msginfo->folder, F_DRAFT))
+ mimeinfo = procmime_scan_file(file);
+ else
+ mimeinfo = procmime_scan_queue_file(file);
+
messageview->updating = FALSE;
if (messageview->deferred_destroy) {
+ g_free(file);
messageview_destroy(messageview);
return 0;
}
break;
}
}
-
- messageview->updating = TRUE;
- file = procmsg_get_message_file_path(msginfo);
- messageview->updating = FALSE;
-
- if (messageview->deferred_destroy) {
- g_free(file);
- messageview_destroy(messageview);
- return 0;
- }
-
- if (!file) {
- g_warning("can't get message file path.\n");
- procmime_mimeinfo_free_all(mimeinfo);
- textview_show_error(messageview->mimeview->textview);
- return -1;
- }
-
+
if (messageview->msginfo != msginfo) {
procmsg_msginfo_free(messageview->msginfo);
messageview->msginfo = NULL;
messageview_set_menu_sensitive(messageview);
- messageview->msginfo = procmsg_msginfo_get_full_info(msginfo);
+ messageview->msginfo =
+ procmsg_msginfo_get_full_info_from_file(msginfo, file);
if (!messageview->msginfo)
messageview->msginfo = procmsg_msginfo_copy(msginfo);
} else {
}
mimeview_show_message(messageview->mimeview, mimeinfo, file);
+#ifndef MAEMO
messageview_set_position(messageview, 0);
+#endif
if (messageview->window && msginfo->subject) {
subject = g_strdup(msginfo->subject);
debug_print("destroy messageview\n");
messageview_list = g_list_remove(messageview_list, messageview);
- if (messageview->mainwin->summaryview->messageview == messageview)
+ if (messageview->mainwin->summaryview->messageview == messageview) {
+ messageview->mainwin->summaryview->displayed = NULL;
messageview->mainwin->summaryview->messageview = NULL;
-
- if (messageview->mainwin->summaryview->ext_messageview == messageview)
+ }
+ if (messageview->mainwin->summaryview->ext_messageview == messageview) {
+ messageview->mainwin->summaryview->displayed = NULL;
messageview->mainwin->summaryview->ext_messageview = NULL;
-
+ }
if (!messageview->deferred_destroy) {
hooks_unregister_hook(MSGINFO_UPDATE_HOOKLIST,
messageview->msginfo_update_callback_id);
messageview_save_as(messageview);
}
-#ifdef USE_GNOMEPRINT
+#if defined(USE_GNOMEPRINT) || GTK_CHECK_VERSION(2,10,0)
static void print_mimeview(MimeView *mimeview, gint sel_start, gint sel_end, gint partnum)
{
+#if !defined(USE_GNOMEPRINT) && GTK_CHECK_VERSION(2,10,0)
+ MainWindow *mainwin;
+#endif
if (!mimeview
|| !mimeview->textview
|| !mimeview->textview->text)
gtk_text_buffer_get_iter_at_offset(buffer, &end, sel_end);
gtk_text_buffer_select_range(buffer, &start, &end);
}
-
+#if defined(USE_GNOMEPRINT)
gedit_print(GTK_TEXT_VIEW(mimeview->textview->text));
+#else
+ /* TODO: Get the real parent window, not the main window */
+ mainwin = mainwindow_get_mainwindow();
+ printing_print(GTK_TEXT_VIEW(mimeview->textview->text),
+ mainwin ? GTK_WINDOW(mainwin->window) : NULL,
+ sel_start, sel_end);
+#endif
}
}
}
#endif
+#if GTK_CHECK_VERSION(2,10,0) && !defined(USE_GNOMEPRINT)
+static void page_setup_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ MessageView *messageview = (MessageView *)data;
+ printing_page_setup(messageview ?
+ GTK_WINDOW(messageview->window) : NULL);
+}
+#endif
+
static void print_cb(gpointer data, guint action, GtkWidget *widget)
{
MessageView *messageview = (MessageView *)data;
-#ifndef USE_GNOMEPRINT
+#if !defined(USE_GNOMEPRINT) && !GTK_CHECK_VERSION(2,10,0)
gchar *cmdline = NULL;
gchar *p;
#else
#endif
if (!messageview->msginfo) return;
-#ifndef USE_GNOMEPRINT
+
+#if !defined(USE_GNOMEPRINT) && !GTK_CHECK_VERSION(2,10,0)
cmdline = input_dialog(_("Print"),
- _("Enter the print command line:\n"
+ _("Ente the print command line:\n"
"('%s' will be replaced with file name)"),
prefs_common.print_cmd);
if (!cmdline) return;
message_search(messageview);
}
+static void prev_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ MessageView *messageview = (MessageView *)data;
+ messageview->updating = TRUE;
+ summary_step(messageview->mainwin->summaryview, GTK_SCROLL_STEP_BACKWARD);
+ messageview->updating = FALSE;
+
+ if (messageview->deferred_destroy) {
+ debug_print("messageview got away!\n");
+ messageview_destroy(messageview);
+ return;
+ }
+ if (messageview->mainwin->summaryview->selected) {
+#ifndef MAEMO
+ MsgInfo * msginfo = summary_get_selected_msg(messageview->mainwin->summaryview);
+
+ if (msginfo)
+ messageview_show(messageview, msginfo,
+ messageview->all_headers);
+#endif
+ } else {
+ gtk_widget_destroy(messageview->window);
+ }
+}
+
+static void next_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ MessageView *messageview = (MessageView *)data;
+ messageview->updating = TRUE;
+ summary_step(messageview->mainwin->summaryview, GTK_SCROLL_STEP_FORWARD);
+ messageview->updating = FALSE;
+
+ if (messageview->deferred_destroy) {
+ debug_print("messageview got away!\n");
+ messageview_destroy(messageview);
+ return;
+ }
+ if (messageview->mainwin->summaryview->selected) {
+#ifndef MAEMO
+ MsgInfo * msginfo = summary_get_selected_msg(messageview->mainwin->summaryview);
+
+ if (msginfo)
+ messageview_show(messageview, msginfo,
+ messageview->all_headers);
+#endif
+ } else {
+ gtk_widget_destroy(messageview->window);
+ }
+}
+
+static void prev_unread_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ MessageView *messageview = (MessageView *)data;
+ messageview->updating = TRUE;
+ summary_select_prev_unread(messageview->mainwin->summaryview);
+ messageview->updating = FALSE;
+
+ if (messageview->deferred_destroy) {
+ debug_print("messageview got away!\n");
+ messageview_destroy(messageview);
+ return;
+ }
+ if (messageview->mainwin->summaryview->selected) {
+#ifndef MAEMO
+ MsgInfo * msginfo = summary_get_selected_msg(messageview->mainwin->summaryview);
+
+ if (msginfo)
+ messageview_show(messageview, msginfo,
+ messageview->all_headers);
+#endif
+ } else {
+ gtk_widget_destroy(messageview->window);
+ }
+}
+
+static void next_unread_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ MessageView *messageview = (MessageView *)data;
+ messageview->updating = TRUE;
+ summary_select_next_unread(messageview->mainwin->summaryview);
+ messageview->updating = FALSE;
+
+ if (messageview->deferred_destroy) {
+ debug_print("messageview got away!\n");
+ messageview_destroy(messageview);
+ return;
+ }
+ if (messageview->mainwin->summaryview->selected) {
+#ifndef MAEMO
+ MsgInfo * msginfo = summary_get_selected_msg(messageview->mainwin->summaryview);
+
+ if (msginfo)
+ messageview_show(messageview, msginfo,
+ messageview->all_headers);
+#endif
+ } else {
+ gtk_widget_destroy(messageview->window);
+ }
+}
+
+static void prev_new_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ MessageView *messageview = (MessageView *)data;
+ messageview->updating = TRUE;
+ summary_select_prev_new(messageview->mainwin->summaryview);
+ messageview->updating = FALSE;
+
+ if (messageview->deferred_destroy) {
+ debug_print("messageview got away!\n");
+ messageview_destroy(messageview);
+ return;
+ }
+ if (messageview->mainwin->summaryview->selected) {
+#ifndef MAEMO
+ MsgInfo * msginfo = summary_get_selected_msg(messageview->mainwin->summaryview);
+
+ if (msginfo)
+ messageview_show(messageview, msginfo,
+ messageview->all_headers);
+#endif
+ } else {
+ gtk_widget_destroy(messageview->window);
+ }
+}
+
+static void next_new_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ MessageView *messageview = (MessageView *)data;
+ messageview->updating = TRUE;
+ summary_select_next_new(messageview->mainwin->summaryview);
+ messageview->updating = FALSE;
+
+ if (messageview->deferred_destroy) {
+ debug_print("messageview got away!\n");
+ messageview_destroy(messageview);
+ return;
+ }
+ if (messageview->mainwin->summaryview->selected) {
+#ifndef MAEMO
+ MsgInfo * msginfo = summary_get_selected_msg(messageview->mainwin->summaryview);
+
+ if (msginfo)
+ messageview_show(messageview, msginfo,
+ messageview->all_headers);
+#endif
+ } else {
+ gtk_widget_destroy(messageview->window);
+ }
+}
+
+static void prev_marked_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ MessageView *messageview = (MessageView *)data;
+ messageview->updating = TRUE;
+ summary_select_prev_marked(messageview->mainwin->summaryview);
+ messageview->updating = FALSE;
+
+ if (messageview->deferred_destroy) {
+ debug_print("messageview got away!\n");
+ messageview_destroy(messageview);
+ return;
+ }
+ if (messageview->mainwin->summaryview->selected) {
+#ifndef MAEMO
+ MsgInfo * msginfo = summary_get_selected_msg(messageview->mainwin->summaryview);
+
+ if (msginfo)
+ messageview_show(messageview, msginfo,
+ messageview->all_headers);
+#endif
+ } else {
+ gtk_widget_destroy(messageview->window);
+ }
+}
+
+static void next_marked_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ MessageView *messageview = (MessageView *)data;
+ messageview->updating = TRUE;
+ summary_select_next_marked(messageview->mainwin->summaryview);
+ messageview->updating = FALSE;
+
+ if (messageview->deferred_destroy) {
+ debug_print("messageview got away!\n");
+ messageview_destroy(messageview);
+ return;
+ }
+ if (messageview->mainwin->summaryview->selected) {
+#ifndef MAEMO
+ MsgInfo * msginfo = summary_get_selected_msg(messageview->mainwin->summaryview);
+
+ if (msginfo)
+ messageview_show(messageview, msginfo,
+ messageview->all_headers);
+#endif
+ } else {
+ gtk_widget_destroy(messageview->window);
+ }
+}
+
+static void prev_labeled_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ MessageView *messageview = (MessageView *)data;
+ messageview->updating = TRUE;
+ summary_select_prev_labeled(messageview->mainwin->summaryview);
+ messageview->updating = FALSE;
+
+ if (messageview->deferred_destroy) {
+ debug_print("messageview got away!\n");
+ messageview_destroy(messageview);
+ return;
+ }
+ if (messageview->mainwin->summaryview->selected) {
+#ifndef MAEMO
+ MsgInfo * msginfo = summary_get_selected_msg(messageview->mainwin->summaryview);
+
+ if (msginfo)
+ messageview_show(messageview, msginfo,
+ messageview->all_headers);
+#endif
+ } else {
+ gtk_widget_destroy(messageview->window);
+ }
+}
+
+static void next_labeled_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ MessageView *messageview = (MessageView *)data;
+ messageview->updating = TRUE;
+ summary_select_next_labeled(messageview->mainwin->summaryview);
+ messageview->updating = FALSE;
+
+ if (messageview->deferred_destroy) {
+ debug_print("messageview got away!\n");
+ messageview_destroy(messageview);
+ return;
+ }
+ if (messageview->mainwin->summaryview->selected) {
+#ifndef MAEMO
+ MsgInfo * msginfo = summary_get_selected_msg(messageview->mainwin->summaryview);
+
+ if (msginfo)
+ messageview_show(messageview, msginfo,
+ messageview->all_headers);
+#endif
+ } else {
+ gtk_widget_destroy(messageview->window);
+ }
+}
+
+static void last_read_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ MessageView *messageview = (MessageView *)data;
+ messageview->updating = TRUE;
+ summary_select_last_read(messageview->mainwin->summaryview);
+ messageview->updating = FALSE;
+
+ if (messageview->deferred_destroy) {
+ debug_print("messageview got away!\n");
+ messageview_destroy(messageview);
+ return;
+ }
+ if (messageview->mainwin->summaryview->selected) {
+#ifndef MAEMO
+ MsgInfo * msginfo = summary_get_selected_msg(messageview->mainwin->summaryview);
+
+ if (msginfo)
+ messageview_show(messageview, msginfo,
+ messageview->all_headers);
+#endif
+ } else {
+ gtk_widget_destroy(messageview->window);
+ }
+}
+
+static void parent_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ MessageView *messageview = (MessageView *)data;
+ messageview->updating = TRUE;
+ summary_select_parent(messageview->mainwin->summaryview);
+ messageview->updating = FALSE;
+
+ if (messageview->deferred_destroy) {
+ debug_print("messageview got away!\n");
+ messageview_destroy(messageview);
+ return;
+ }
+ if (messageview->mainwin->summaryview->selected) {
+#ifndef MAEMO
+ MsgInfo * msginfo = summary_get_selected_msg(messageview->mainwin->summaryview);
+
+ if (msginfo)
+ messageview_show(messageview, msginfo,
+ messageview->all_headers);
+#endif
+ } else {
+ gtk_widget_destroy(messageview->window);
+ }
+}
+
+static void goto_unread_folder_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ MessageView *messageview = (MessageView *)data;
+ messageview->updating = TRUE;
+ folderview_select_next_unread(messageview->mainwin->folderview, FALSE);
+ messageview->updating = FALSE;
+
+ if (messageview->deferred_destroy) {
+ debug_print("messageview got away!\n");
+ messageview_destroy(messageview);
+ return;
+ }
+ if (messageview->mainwin->summaryview->selected) {
+#ifndef MAEMO
+ MsgInfo * msginfo = summary_get_selected_msg(messageview->mainwin->summaryview);
+
+ if (msginfo)
+ messageview_show(messageview, msginfo,
+ messageview->all_headers);
+#endif
+ } else {
+ gtk_widget_destroy(messageview->window);
+ }
+}
+
+static void goto_folder_cb(gpointer data, guint action, GtkWidget *widget)
+{
+ MessageView *messageview = (MessageView *)data;
+ messageview->updating = TRUE;
+ FolderItem *to_folder;
+ messageview->updating = FALSE;
+
+ to_folder = foldersel_folder_sel(NULL, FOLDER_SEL_ALL, NULL);
+
+ if (to_folder) {
+ folderview_select(messageview->mainwin->folderview, to_folder);
+
+ if (messageview->deferred_destroy) {
+ debug_print("messageview got away!\n");
+ messageview_destroy(messageview);
+ return;
+ }
+ if (messageview->mainwin->summaryview->selected) {
+#ifndef MAEMO
+ MsgInfo * msginfo = summary_get_selected_msg(messageview->mainwin->summaryview);
+
+ if (msginfo)
+ messageview_show(messageview, msginfo,
+ messageview->all_headers);
+#endif
+ } else {
+ gtk_widget_destroy(messageview->window);
+ }
+ }
+}
+
static void set_charset_cb(gpointer data, guint action, GtkWidget *widget)
{
MessageView *messageview = (MessageView *)data;
static void add_address_cb(gpointer data, guint action, GtkWidget *widget)
{
MessageView *messageview = (MessageView *)data;
- MsgInfo *msginfo;
+ MsgInfo *msginfo, *full_msginfo;
gchar *from;
+ GtkWidget *image = NULL;
+ GdkPixbuf *picture = NULL;
+
+ if (!messageview->msginfo || !messageview->msginfo->from)
+ return;
- if (!messageview->msginfo) return;
msginfo = messageview->msginfo;
Xstrdup_a(from, msginfo->from, return);
eliminate_address_comment(from);
extract_address(from);
- addressbook_add_contact(msginfo->fromname, from, NULL);
+
+ full_msginfo = procmsg_msginfo_get_full_info(msginfo);
+ if (full_msginfo &&
+ full_msginfo->extradata &&
+ full_msginfo->extradata->face) {
+ image = face_get_from_header(full_msginfo->extradata->face);
+ }
+#if HAVE_LIBCOMPFACE
+ else if (full_msginfo &&
+ full_msginfo->extradata &&
+ full_msginfo->extradata->xface) {
+ image = xface_get_from_header(full_msginfo->extradata->xface,
+ &messageview->mainwin->summaryview->ctree->style->white,
+ messageview->window->window);
+ }
+#endif
+ procmsg_msginfo_free(full_msginfo);
+ if (image)
+ picture = gtk_image_get_pixbuf(GTK_IMAGE(image));
+
+ addressbook_add_contact(msginfo->fromname, from, NULL, picture);
+
+ if (image)
+ gtk_widget_destroy(image);
}
static void create_filter_cb(gpointer data, guint action, GtkWidget *widget)
ClickableText *uri = (ClickableText *)cur->data;
if (uri->uri &&
(!g_ascii_strncasecmp(uri->uri, "ftp.", 4) ||
+ !g_ascii_strncasecmp(uri->uri, "ftp:", 4) ||
!g_ascii_strncasecmp(uri->uri, "www.", 4) ||
!g_ascii_strncasecmp(uri->uri, "http:", 5) ||
!g_ascii_strncasecmp(uri->uri, "https:", 6)))