aboutsummaryrefslogtreecommitdiff
path: root/src/mimeview.c
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2007-07-10 06:00:12 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2007-07-10 06:00:12 +0000
commit9e9eff6f8bf3bde63ddc7cc6344a43268a27943e (patch)
treef696045557d00d404402d4593899a861573c7995 /src/mimeview.c
parent8184b1fe44c098265726a5aa6e219f420ac77c42 (diff)
added the feature to reply to attached message/rfc822 messages.
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@1852 ee746299-78ed-0310-b773-934348b2243d
Diffstat (limited to 'src/mimeview.c')
-rw-r--r--src/mimeview.c78
1 files changed, 75 insertions, 3 deletions
diff --git a/src/mimeview.c b/src/mimeview.c
index 9ce62a15..9851b698 100644
--- a/src/mimeview.c
+++ b/src/mimeview.c
@@ -1,6 +1,6 @@
/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2006 Hiroyuki Yamamoto
+ * Copyright (C) 1999-2007 Hiroyuki Yamamoto
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -54,6 +54,7 @@
#include "procheader.h"
#include "summaryview.h"
#include "menu.h"
+#include "compose.h"
#include "filesel.h"
#include "alertpanel.h"
#include "inputdialog.h"
@@ -120,6 +121,10 @@ static void mimeview_open_with (MimeView *mimeview);
static void mimeview_view_file (const gchar *filename,
MimeInfo *partinfo,
const gchar *cmdline);
+
+static void mimeview_reply (MimeView *mimeview,
+ guint action);
+
#if USE_GPGME
static void mimeview_check_signature (MimeView *mimeview);
#endif
@@ -131,9 +136,18 @@ static GtkItemFactoryEntry mimeview_popup_entries[] =
{N_("/_Display as text"), NULL, mimeview_display_as_text, 0, NULL},
{N_("/_Save as..."), NULL, mimeview_save_as, 0, NULL},
{N_("/Save _all..."), NULL, mimeview_save_all, 0, NULL},
- {N_("/_Print..."), NULL, mimeview_print, 0, NULL}
+ {N_("/_Print..."), NULL, mimeview_print, 0, NULL},
+ {N_("/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_Reply"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_Reply/_Reply"), NULL, mimeview_reply, COMPOSE_REPLY, NULL},
+ {N_("/_Reply/Reply to _all"),
+ NULL, mimeview_reply, COMPOSE_REPLY_TO_ALL, NULL},
+ {N_("/_Reply/Reply to _sender"),
+ NULL, mimeview_reply, COMPOSE_REPLY_TO_SENDER, NULL},
+ {N_("/_Reply/Reply to mailing _list"),
+ NULL, mimeview_reply, COMPOSE_REPLY_TO_LIST, NULL},
#if USE_GPGME
- ,
+ {N_("/---"), NULL, NULL, 0, "<Separator>"},
{N_("/_Check signature"), NULL, mimeview_check_signature, 0, NULL}
#endif
};
@@ -158,6 +172,9 @@ MimeView *mimeview_create(void)
GtkWidget *popupmenu;
GtkItemFactory *popupfactory;
gint n_entries;
+ GtkWidget *reply_separator;
+ GtkWidget *reply_menuitem;
+ GList *child;
debug_print(_("Creating MIME view...\n"));
mimeview = g_new0(MimeView, 1);
@@ -240,6 +257,11 @@ MimeView *mimeview_create(void)
popupmenu = menu_create_items(mimeview_popup_entries, n_entries,
"<MimeView>", &popupfactory, mimeview);
+ reply_menuitem = gtk_item_factory_get_item(popupfactory, "/Reply");
+ child = g_list_find(GTK_MENU_SHELL(popupmenu)->children,
+ reply_menuitem);
+ reply_separator = GTK_WIDGET(child->prev->data);
+
mimeview->paned = paned;
mimeview->scrolledwin = scrolledwin;
mimeview->treeview = treeview;
@@ -248,6 +270,8 @@ MimeView *mimeview_create(void)
mimeview->mime_vbox = mime_vbox;
mimeview->popupmenu = popupmenu;
mimeview->popupfactory = popupfactory;
+ mimeview->reply_separator = reply_separator;
+ mimeview->reply_menuitem = reply_menuitem;
mimeview->type = -1;
return mimeview;
@@ -854,6 +878,14 @@ static gint mimeview_button_pressed(GtkWidget *widget, GdkEventButton *event,
else
menu_set_sensitive(mimeview->popupfactory,
"/Print...", FALSE);
+
+ if (partinfo && partinfo->mime_type == MIME_MESSAGE_RFC822) {
+ gtk_widget_show(mimeview->reply_separator);
+ gtk_widget_show(mimeview->reply_menuitem);
+ } else {
+ gtk_widget_hide(mimeview->reply_separator);
+ gtk_widget_hide(mimeview->reply_menuitem);
+ }
#if USE_GPGME
menu_set_sensitive(mimeview->popupfactory,
"/Check signature",
@@ -1221,6 +1253,46 @@ static void mimeview_view_file(const gchar *filename, MimeInfo *partinfo,
g_warning("MIME viewer command line is invalid: '%s'", cmd);
}
+static void mimeview_reply(MimeView *mimeview, guint action)
+{
+ MimeInfo *partinfo;
+ gchar *filename;
+ MsgInfo *msginfo;
+ MsgFlags flags = {0, 0};
+ ComposeMode mode = action;
+
+ if (!mimeview->opened) return;
+ if (!mimeview->file) return;
+
+ partinfo = mimeview_get_selected_part(mimeview);
+ g_return_if_fail(partinfo != NULL);
+
+ if (partinfo->mime_type != MIME_MESSAGE_RFC822)
+ return;
+
+ filename = procmime_get_tmp_file_name(partinfo);
+ if (procmime_get_part(filename, mimeview->file, partinfo) < 0) {
+ alertpanel_error
+ (_("Can't save the part of multipart message."));
+ g_free(filename);
+ return;
+ }
+
+ msginfo = procheader_parse_file(filename, flags, TRUE);
+ msginfo->file_path = filename;
+ filename = NULL;
+ if (prefs_common.reply_with_quote)
+ mode |= COMPOSE_WITH_QUOTE;
+
+ if (mimeview->messageview->mainwin)
+ compose_reply(msginfo, mimeview->messageview->mainwin->summaryview->folder_item,
+ mode, NULL);
+ else
+ compose_reply(msginfo, NULL, mode, NULL);
+
+ procmsg_msginfo_free(msginfo);
+}
+
#if USE_GPGME
static gboolean update_node_name_func(GtkTreeModel *model, GtkTreePath *path,
GtkTreeIter *iter, gpointer data)