From 9e9eff6f8bf3bde63ddc7cc6344a43268a27943e Mon Sep 17 00:00:00 2001 From: hiro Date: Tue, 10 Jul 2007 06:00:12 +0000 Subject: 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 --- src/mimeview.c | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 75 insertions(+), 3 deletions(-) (limited to 'src/mimeview.c') 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, ""}, + {N_("/_Reply"), NULL, NULL, 0, ""}, + {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, ""}, {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, "", &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) -- cgit v1.2.3