#include "procheader.h"
#include "procmime.h"
#include "account.h"
+#include "action.h"
#include "prefs_common.h"
#include "prefs_account.h"
#include "gtkutils.h"
#include "utils.h"
#include "rfc2015.h"
#include "send_message.h"
-#include "pgptext.h"
#include "stock_pixmap.h"
+static GList *messageview_list = NULL;
static void messageview_change_view_type(MessageView *messageview,
MessageType type);
NULL, create_filter_cb, FILTER_BY_TO, NULL},
{N_("/_Tools/_Create filter rule/by _Subject"),
NULL, create_filter_cb, FILTER_BY_SUBJECT, NULL},
+ {N_("/_Tools/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Tools/Actio_ns"), NULL, NULL, 0, "<Branch>"},
{N_("/_Help"), NULL, NULL, 0, "<Branch>"},
{N_("/_Help/_About"), NULL, about_cb, 0, NULL}
textview = textview_create();
textview->messageview = messageview;
- mimeview = mimeview_create();
+ mimeview = mimeview_create(mainwin);
mimeview->textview = textview_create();
mimeview->textview->messageview = messageview;
mimeview->messageview = messageview;
GtkWidget *handlebox;
GtkWidget *vbox;
GtkWidget *menubar;
+ GtkItemFactory *ifactory;
guint n_menu_entries;
vbox = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(vbox),
GTK_WIDGET_PTR(msgview));
+ ifactory = gtk_item_factory_from_widget(menubar);
+ action_update_msgview_menu(ifactory, msgview);
+
msgview_list = g_list_append(msgview_list, msgview);
}
dest[len - 1] = '\0';
return;
} else
- conv_encode_header(dest, len, src, header_len);
+ conv_encode_header(dest, len, src, header_len, FALSE);
}
static gint disposition_notification_queue(PrefsAccount * account,
}
queue = folder_get_default_queue();
- if ((num = folder_item_add_msg(queue, tmp, TRUE)) < 0) {
+ if ((num = folder_item_add_msg(queue, tmp, NULL, TRUE)) < 0) {
g_warning("can't queue the message\n");
unlink(tmp);
g_free(tmp);
"receipt."), to, buf);
val = alertpanel(_("Warning"), message, _("Send"),
_("+Don't Send"), NULL);
+ g_free(message);
if (val != G_ALERTDEFAULT)
return -1;
}
return ok;
}
+GList *messageview_get_window_list(void)
+{
+ return messageview_list;
+}
+
void messageview_show(MessageView *messageview, MsgInfo *msginfo,
gboolean all_headers)
{
- FILE *fp;
gchar *file;
MimeInfo *mimeinfo;
g_return_if_fail(msginfo != NULL);
-#if USE_GPGME
- if ((fp = procmsg_open_message_decrypted(msginfo, &mimeinfo)) == NULL)
- return;
-#else /* !USE_GPGME */
- if ((fp = procmsg_open_message(msginfo)) == NULL) return;
- mimeinfo = procmime_scan_mime_header(fp);
-#endif /* USE_GPGME */
- fclose(fp);
- if (!mimeinfo) return;
+ mimeinfo = procmime_scan_message(msginfo);
+ g_return_if_fail(mimeinfo != NULL);
file = procmsg_get_message_file_path(msginfo);
if (!file) {
textview_set_all_headers(messageview->textview, all_headers);
textview_set_all_headers(messageview->mimeview->textview, all_headers);
- if (mimeinfo->mime_type != MIME_TEXT &&
- mimeinfo->mime_type != MIME_TEXT_HTML) {
+ if (mimeinfo->mime_type != MIME_TEXT) {
messageview_change_view_type(messageview, MVIEW_MIME);
mimeview_show_message(messageview->mimeview, mimeinfo, file);
} else {
procmime_mimeinfo_free_all(mimeinfo);
}
- if (MSG_IS_RETRCPT_PENDING(msginfo->flags))
- return_receipt_show(messageview->noticeview, msginfo);
+ if ((messageview->msginfo->dispositionnotificationto ||
+ messageview->msginfo->returnreceiptto) &&
+ !MSG_IS_RETRCPT_SENT(messageview->msginfo->flags))
+ return_receipt_show(messageview->noticeview, messageview->msginfo);
else
noticeview_hide(messageview->noticeview);
for (cur = msgview_list; cur != NULL; cur = cur->next) {
msgview = (MessageView*)cur->data;
toolbar_update(TOOLBAR_MSGVIEW, msgview);
+ mimeview_update(msgview->mimeview);
}
}
procmsg_msginfo_free(messageview->msginfo);
messageview->msginfo = NULL;
messageview_change_view_type(messageview, MVIEW_TEXT);
+ messageview->filtered = FALSE;
headerview_clear(messageview->headerview);
textview_clear(messageview->textview);
noticeview_hide(messageview->noticeview);
GtkWidget *mimeview = GTK_WIDGET_PTR(messageview->mimeview);
debug_print("destroy messageview\n");
+ messageview_list = g_list_remove(messageview_list, messageview);
+
headerview_destroy(messageview->headerview);
textview_destroy(messageview->textview);
mimeview_destroy(messageview->mimeview);
void messageview_delete(MessageView *msgview)
{
MsgInfo *msginfo = (MsgInfo*)msgview->msginfo;
- SummaryView *summaryview = (SummaryView*)msgview->mainwin->summaryview;
FolderItem *trash = folder_get_default_trash();
GSList *msg_list;
return text;
}
+MimeInfo *messageview_get_selected_mime_part(MessageView *messageview)
+{
+ if (messageview->type == MVIEW_MIME)
+ return mimeview_get_selected_part(messageview->mimeview);
+
+ return NULL;
+}
+
void messageview_copy_clipboard(MessageView *messageview)
{
TextView *text;
static void return_receipt_show(NoticeView *noticeview, MsgInfo *msginfo)
{
- noticeview_set_text(noticeview, _("This messages asks for a return receipt."));
+ 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),
tmpmsginfo->msgnum = msginfo->msgnum;
if (disposition_notification_send(tmpmsginfo) >= 0) {
- procmsg_msginfo_unset_flags(msginfo, MSG_RETRCPT_PENDING, 0);
+ procmsg_msginfo_set_flags(msginfo, MSG_RETRCPT_SENT, 0);
noticeview_hide(noticeview);
}
return account_find_from_id(account_id);
}
-
/*
- * \brief return selected messageview text used by composing
- * to reply to selected text only
+ * \brief return selected messageview text, when nothing is
+ * selected and message was filtered, return complete text
*
* \param pointer to Messageview
*
*/
gchar *messageview_get_selection(MessageView *msgview)
{
+ TextView *textview;
gchar *text = NULL;
+ GtkEditable *edit = NULL;
+ gint body_pos = 0;
g_return_val_if_fail(msgview != NULL, NULL);
- text = gtkut_editable_get_selection
- (GTK_EDITABLE(msgview->textview->text));
-
- if (!text && msgview->type == MVIEW_MIME
- && msgview->mimeview->type == MIMEVIEW_TEXT
- && msgview->mimeview->textview
- && !msgview->mimeview->textview->default_text) {
- text = gtkut_editable_get_selection
- (GTK_EDITABLE(msgview->mimeview->textview->text));
+ textview = messageview_get_current_textview(msgview);
+ if (textview) {
+ edit = GTK_EDITABLE(textview->text);
+ body_pos = textview->body_pos;
+ } else {
+ edit = GTK_EDITABLE(msgview->mimeview->textview->text);
+ body_pos = msgview->mimeview->textview->body_pos;
}
+ g_return_val_if_fail(edit != NULL, NULL);
+
+ if (edit->has_selection)
+ text = gtkut_editable_get_selection(edit);
+ else if (msgview->filtered)
+ text = gtk_editable_get_chars (edit, body_pos, -1);
+ else
+ text = NULL;
+
return text;
}