/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ * Copyright (C) 1999-2004 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
#include "send_message.h"
#include "stock_pixmap.h"
#include "hooks.h"
+#include "filtering.h"
static GList *messageview_list = NULL;
static void create_filter_cb (gpointer data,
guint action,
GtkWidget *widget);
+static void create_processing_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
static void about_cb (gpointer data,
guint action,
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/Create processing rule/"),
+ NULL, NULL, 0, "<Branch>"},
+ {N_("/_Tools/Create processing rule/_Automatically"),
+ NULL, create_processing_cb, FILTER_BY_AUTO, NULL},
+ {N_("/_Tools/Create processing rule/by _From"),
+ NULL, create_processing_cb, FILTER_BY_FROM, NULL},
+ {N_("/_Tools/Create processing rule/by _To"),
+ NULL, create_processing_cb, FILTER_BY_TO, NULL},
+ {N_("/_Tools/Create processing rule/by _Subject"),
+ NULL, create_processing_cb, FILTER_BY_SUBJECT, NULL},
{N_("/_Tools/---"), NULL, NULL, 0, "<Separator>"},
{N_("/_Tools/Actio_ns"), NULL, NULL, 0, "<Branch>"},
GTK_WIDGET_PTR(mimeview), TRUE, TRUE, 0);
gtk_widget_show(vbox);
- messageview->vbox = vbox;
- messageview->new_window = FALSE;
- messageview->window = NULL;
- messageview->headerview = headerview;
- messageview->mimeview = mimeview;
+ messageview->vbox = vbox;
+ messageview->new_window = FALSE;
+ messageview->window = NULL;
+ messageview->headerview = headerview;
+ messageview->mimeview = mimeview;
messageview->noticeview = noticeview;
messageview->mainwin = mainwin;
+
+ messageview->statusbar = NULL;
+ messageview->statusbar_cid = 0;
+
messageview->msginfo_update_callback_id =
hooks_register_hook(MSGINFO_UPDATE_HOOKLIST, messageview_update_msg, (gpointer) messageview);
return messageview;
}
-
GList *messageview_get_msgview_list(void)
{
return msgview_list;
}
+void messageview_update_actions_menu(MessageView *msgview)
+{
+ GtkItemFactory *ifactory;
+
+ /* Messages opened in a new window do not have a menu bar */
+ if (msgview->menubar == NULL)
+ return;
+ ifactory = gtk_item_factory_from_widget(msgview->menubar);
+ action_update_msgview_menu(ifactory, "/Tools/Actions", msgview);
+}
+
void messageview_add_toolbar(MessageView *msgview, GtkWidget *window)
{
GtkWidget *handlebox;
GtkWidget *vbox;
GtkWidget *menubar;
+ GtkWidget *statusbar;
GtkItemFactory *ifactory;
guint n_menu_entries;
vbox = gtk_vbox_new(FALSE, 0);
gtk_widget_show(vbox);
gtk_container_add(GTK_CONTAINER(window), vbox);
-
+
n_menu_entries = sizeof(msgview_entries) / sizeof(msgview_entries[0]);
menubar = menubar_create(window, msgview_entries,
n_menu_entries, "<MessageView>", msgview);
+ gtk_widget_show(menubar);
gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, TRUE, 0);
handlebox = gtk_handle_box_new();
gtk_box_pack_start(GTK_BOX(vbox), handlebox, FALSE, FALSE, 0);
msgview->toolbar = toolbar_create(TOOLBAR_MSGVIEW, handlebox,
(gpointer)msgview);
+
+ statusbar = gtk_statusbar_new();
+ gtk_widget_show(statusbar);
+ gtk_box_pack_end(GTK_BOX(vbox), statusbar, FALSE, FALSE, 0);
+ msgview->statusbar = statusbar;
+ msgview->statusbar_cid = gtk_statusbar_get_context_id
+ (GTK_STATUSBAR(statusbar), "Message View");
+
msgview->handlebox = handlebox;
msgview->menubar = menubar;
gtk_container_add(GTK_CONTAINER(vbox),
GTK_WIDGET_PTR(msgview));
- ifactory = gtk_item_factory_from_widget(menubar);
- action_update_msgview_menu(ifactory, msgview);
+ messageview_update_actions_menu(msgview);
msgview_list = g_list_append(msgview_list, msgview);
}
MessageView *messageview_create_with_new_window(MainWindow *mainwin)
{
- GtkWidget *window;
MessageView *msgview;
+ GtkWidget *window;
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), _("Sylpheed - Message View"));
return encinfo;
}
-void messageview_show(MessageView *messageview, MsgInfo *msginfo,
+gint messageview_show(MessageView *messageview, MsgInfo *msginfo,
gboolean all_headers)
{
gchar *file;
MimeInfo *mimeinfo, *encinfo;
- g_return_if_fail(msginfo != NULL);
+ g_return_val_if_fail(msginfo != NULL, -1);
mimeinfo = procmime_scan_message(msginfo);
- g_return_if_fail(mimeinfo != NULL);
+ if (!mimeinfo) {
+ textview_show_error(messageview->mimeview->textview);
+ return -1;
+ }
while ((encinfo = find_encrypted_part(mimeinfo)) != NULL) {
debug_print("decrypting message part\n");
if (!file) {
g_warning("can't get message file path.\n");
procmime_mimeinfo_free_all(mimeinfo);
- return;
+ textview_show_error(messageview->mimeview->textview);
+ return -1;
}
if (messageview->msginfo != msginfo) {
noticeview_hide(messageview->noticeview);
g_free(file);
+
+ return 0;
}
void messageview_reflect_prefs_pixmap_theme(void)
msgview_list = g_list_remove(msgview_list, messageview);
g_free(messageview);
-
- gtk_widget_unref(mimeview);
}
void messageview_delete(MessageView *msgview)
{
MsgInfo *msginfo = (MsgInfo *) msgview->msginfo;
- FolderItem *trash = folder_get_default_trash();
+ FolderItem *trash = NULL;
+ PrefsAccount *ac = NULL;
g_return_if_fail(msginfo != NULL);
+
+ /* to get the trash folder, we have to choose either
+ * the folder's or account's trash default - we prefer
+ * the one in the account prefs */
+ if (msginfo->folder) {
+ if (NULL != (ac = account_find_from_item(msginfo->folder)))
+ trash = account_get_special_folder(ac, F_TRASH);
+ if (!trash && msginfo->folder->folder)
+ trash = msginfo->folder->folder->trash;
+ /* if still not found, use the default */
+ if (!trash)
+ trash = folder_get_default_trash();
+ }
+
g_return_if_fail(trash != NULL);
if (prefs_common.immediate_exec)
TextView *text;
text = messageview_get_current_textview(messageview);
+ if (text)
return textview_search_string_backward(text,
str, case_sens);
return FALSE;
static void create_filter_cb(gpointer data, guint action, GtkWidget *widget)
{
MessageView *messageview = (MessageView *)data;
- gchar *header = NULL;
- gchar *key = NULL;
-
+ FolderItem * item;
+
if (!messageview->msginfo) return;
+
+ item = messageview->msginfo->folder;
+ summary_msginfo_filter_open(item, messageview->msginfo,
+ (PrefsFilterType)action, 0);
+}
- procmsg_get_filter_keyword(messageview->msginfo, &header, &key,
- (PrefsFilterType)action);
- prefs_filtering_open(NULL, header, key);
-
- g_free(header);
- g_free(key);
+static void create_processing_cb(gpointer data, guint action,
+ GtkWidget *widget)
+{
+ MessageView *messageview = (MessageView *)data;
+ FolderItem * item;
+
+ if (!messageview->msginfo) return;
+
+ item = messageview->msginfo->folder;
+ summary_msginfo_filter_open(item, messageview->msginfo,
+ (PrefsFilterType)action, 1);
}
static void about_cb(gpointer data, guint action, GtkWidget *widget)