commit - 16b22a2b765ededd0b1d628dd6d8c3b54b0375e6
commit + f9285c5a86c512788f5ee2a5f916013d313ca303
blob - 92f8ed652b660be3e91400175492a8845566872d
blob + 52e4fb8524cb83182a40d752971aa81fcad00fa8
--- src/compose.c
+++ src/compose.c
case COMPOSE_REPLYTO:
header = N_("Reply-To:");
break;
- case COMPOSE_NEWSGROUPS:
- header = N_("Newsgroups:");
- break;
case COMPOSE_FOLLOWUPTO:
header = N_( "Followup-To:");
break;
COMPOSE_CC);
COMBOBOX_ADD(model, prefs_common_translated_header_name("Bcc:"),
COMPOSE_BCC);
- COMBOBOX_ADD(model, prefs_common_translated_header_name("Newsgroups:"),
- COMPOSE_NEWSGROUPS);
COMBOBOX_ADD(model, prefs_common_translated_header_name("Reply-To:"),
COMPOSE_REPLYTO);
COMBOBOX_ADD(model, prefs_common_translated_header_name("Followup-To:"),
blob - 52af49d26ed8665e0e73daadf62c07d6d5835b8a
blob + 2b26a505d0d987703c9428d1f3ae76be9f3718bd
--- src/mainwindow.c
+++ src/mainwindow.c
gpointer data);
static void mark_all_unread_cb (GtkAction *action,
gpointer data);
-static void mark_as_spam_cb (GtkAction *action,
- gpointer data);
-static void mark_as_ham_cb (GtkAction *action,
- gpointer data);
static void ignore_thread_cb (GtkAction *action,
gpointer data);
{"Message/Marks/UnignoreThread", NULL, N_("Unignore thread"), NULL, NULL, G_CALLBACK(unignore_thread_cb) },
{"Message/Marks/WatchThread", NULL, N_("Watch thread"), NULL, NULL, G_CALLBACK(watch_thread_cb) },
{"Message/Marks/UnwatchThread", NULL, N_("Unwatch thread"), NULL, NULL, G_CALLBACK(unwatch_thread_cb) },
- /* separation */
- {"Message/Marks/MarkSpam", NULL, N_("Mark as _spam"), NULL, NULL, G_CALLBACK(mark_as_spam_cb) },
- {"Message/Marks/MarkHam", NULL, N_("Mark as _ham"), NULL, NULL, G_CALLBACK(mark_as_ham_cb) },
- /* separation */
-
{"Message/Marks/Lock", NULL, N_("Lock"), NULL, NULL, G_CALLBACK(lock_msgs_cb) },
{"Message/Marks/Unlock", NULL, N_("Unlock"), NULL, NULL, G_CALLBACK(unlock_msgs_cb) },
MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Message/Marks", "WatchThread", "Message/Marks/WatchThread", GTK_UI_MANAGER_MENUITEM)
MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Message/Marks", "UnwatchThread", "Message/Marks/UnwatchThread", GTK_UI_MANAGER_MENUITEM)
MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Message/Marks", "Separator4", "Message/Marks/---", GTK_UI_MANAGER_SEPARATOR)
- MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Message/Marks", "MarkSpam", "Message/Marks/MarkSpam", GTK_UI_MANAGER_MENUITEM)
- MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Message/Marks", "MarkHam", "Message/Marks/MarkHam", GTK_UI_MANAGER_MENUITEM)
MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Message/Marks", "Separator5", "Message/Marks/---", GTK_UI_MANAGER_SEPARATOR)
MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Message/Marks", "Lock", "Message/Marks/Lock", GTK_UI_MANAGER_MENUITEM)
MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Message/Marks", "Unlock", "Message/Marks/Unlock", GTK_UI_MANAGER_MENUITEM)
mainwin->toolbar = toolbar_create(TOOLBAR_MAIN,
handlebox,
(gpointer)mainwin);
- toolbar_set_learn_button
- (mainwin->toolbar,
- LEARN_SPAM);
/* vbox that contains body */
vbox_body = gtk_box_new(GTK_ORIENTATION_VERTICAL, BORDER_WIDTH);
}
}
- if (procmsg_spam_can_learn() &&
- (mainwin->summaryview->folder_item &&
- mainwin->summaryview->folder_item->folder->klass->type != F_UNKNOWN &&
- mainwin->summaryview->folder_item->folder->klass->type != F_NEWS)) {
- UPDATE_STATE(M_CAN_LEARN_SPAM);
- }
-
if (mainwin->summaryview->folder_item) {
UPDATE_STATE(M_FOLDER_SELECTED);
}
SET_SENSITIVE("Menu/Message/DeleteThread", M_TARGET_EXIST, M_SUMMARY_ISLIST);
SET_SENSITIVE("Menu/Message/CancelNews", M_TARGET_EXIST, M_ALLOW_DELETE, M_NEWS);
SET_SENSITIVE("Menu/Message/Marks", M_TARGET_EXIST, M_SUMMARY_ISLIST);
- SET_SENSITIVE("Menu/Message/Marks/MarkSpam", M_TARGET_EXIST, M_CAN_LEARN_SPAM);
- SET_SENSITIVE("Menu/Message/Marks/MarkHam", M_TARGET_EXIST, M_CAN_LEARN_SPAM);
SET_SENSITIVE("Menu/Message/Marks/IgnoreThread", M_TARGET_EXIST);
SET_SENSITIVE("Menu/Message/Marks/UnignoreThread", M_TARGET_EXIST);
SET_SENSITIVE("Menu/Message/Marks/Lock", M_TARGET_EXIST);
summary_mark_all_unread(mainwin->summaryview, TRUE);
}
-static void mark_as_spam_cb(GtkAction *action, gpointer data)
-{
- MainWindow *mainwin = (MainWindow *)data;
- summary_mark_as_spam(mainwin->summaryview, TRUE, NULL);
-}
-
-static void mark_as_ham_cb(GtkAction *action, gpointer data)
-{
- MainWindow *mainwin = (MainWindow *)data;
- summary_mark_as_spam(mainwin->summaryview, FALSE, NULL);
-}
-
static void ignore_thread_cb(GtkAction *action, gpointer data)
{
MainWindow *mainwin = (MainWindow *)data;
fgtn), fgtn, accs);
}
-void mainwindow_learn (MainWindow *mainwin, gboolean is_spam)
-{
- summary_mark_as_spam(mainwin->summaryview, is_spam, NULL);
-}
-
void mainwindow_jump_to(const gchar *target, gboolean popup)
{
gchar *tmp = NULL;
blob - 8aaded1f771c79d53caf2fb2077a69ebc7ec60f6
blob + 15a498895058cb8e3e9760a152ac2742005ea18a
--- src/mainwindow.h
+++ src/mainwindow.h
M_HIDE_READ_MSG,
M_DELAY_EXEC,
M_NOT_NEWS,
- M_CAN_LEARN_SPAM,
M_ACTIONS_EXIST,
M_HAVE_QUEUED_MAILS,
M_TAGS_EXIST,
gboolean ask_sync);
MainWindow *mainwindow_get_mainwindow (void);
-void mainwindow_learn (MainWindow *mainwin,
- gboolean is_spam);
void mainwindow_jump_to (const gchar *target,
gboolean popup);
void mainwindow_show_error (void);
blob - 66eaf8eabcb662879c97b953062637401bc457b5
blob + b0cb66e00e072922d785b5cf61345a11706faa32
--- src/matcher.c
+++ src/matcher.c
{MATCHACTION_UNLOCK, "unlock"},
{MATCHACTION_MARK_AS_READ, "mark_as_read"},
{MATCHACTION_MARK_AS_UNREAD, "mark_as_unread"},
- {MATCHACTION_MARK_AS_SPAM, "mark_as_spam"},
- {MATCHACTION_MARK_AS_HAM, "mark_as_ham"},
{MATCHACTION_FORWARD, "forward"},
{MATCHACTION_FORWARD_AS_ATTACHMENT, "forward_as_attachment"},
{MATCHACTION_EXECUTE, "execute"},
blob - 2a05f4446ca2907951595a05326dcba6d6432771
blob + 547066f1e89a8e1b4062986155e04508fc3047f7
--- src/messageview.c
+++ src/messageview.c
static void reply_cb (GtkAction *action,
gpointer data);
-static PrefsAccount *select_account_from_list
- (GList *ac_list,
- gboolean has_accounts);
static void addressbook_open_cb (GtkAction *action,
gpointer data);
static void add_address_cb (GtkAction *action,
return 0;
}
- if (messageview->toolbar)
- toolbar_set_learn_button
- (messageview->toolbar,
- MSG_IS_SPAM(msginfo->flags)?LEARN_HAM:LEARN_SPAM);
- else
- toolbar_set_learn_button
- (messageview->mainwin->toolbar,
- MSG_IS_SPAM(msginfo->flags)?LEARN_HAM:LEARN_SPAM);
-
- if (messageview->toolbar) {
- if (messageview->toolbar->learn_spam_btn) {
- gboolean can_learn = FALSE;
- if (procmsg_spam_can_learn() &&
- (msginfo->folder &&
- msginfo->folder->folder->klass->type != F_UNKNOWN &&
- msginfo->folder->folder->klass->type != F_NEWS))
- can_learn = TRUE;
-
- gtk_widget_set_sensitive(
- messageview->toolbar->learn_spam_btn,
- can_learn);
- }
- }
-
noticeview_hide(messageview->noticeview);
mimeview_clear(messageview->mimeview);
messageview->updating = TRUE;
return FALSE;
}
-static void select_account_cb(GtkWidget *w, gpointer data)
-{
- *(gint*)data = combobox_get_active_data(GTK_COMBO_BOX(w));
-}
-
-static PrefsAccount *select_account_from_list(GList *ac_list, gboolean has_accounts)
-{
- GtkWidget *optmenu;
- gint account_id;
- AlertValue val;
-
- cm_return_val_if_fail(ac_list != NULL, NULL);
- cm_return_val_if_fail(ac_list->data != NULL, NULL);
-
- optmenu = gtkut_account_menu_new(ac_list,
- G_CALLBACK(select_account_cb),
- &account_id);
- if (!optmenu)
- return NULL;
- account_id = ((PrefsAccount *) ac_list->data)->account_id;
- if (!has_accounts) {
- gchar *tr;
- gchar *text;
- tr = g_strdup(C_("'%s' stands for 'To' then 'Cc'",
- "This message is asking for a return receipt notification\n"
- "but according to its '%s' and '%s' headers it was not\n"
- "officially addressed to you.\n"
- "It is advised to not send the return receipt."));
- text = g_strdup_printf(tr,
- prefs_common_translated_header_name("To"),
- prefs_common_translated_header_name("Cc"));
- val = alertpanel_with_widget(
- _("Return Receipt Notification"),
- text, NULL, _("_Cancel"), NULL, _("_Send Notification"),
- NULL, NULL, ALERTFOCUS_FIRST, FALSE, optmenu);
- g_free(tr);
- g_free(text);
- } else
- val = alertpanel_with_widget(
- _("Return Receipt Notification"),
- _("More than one of your accounts uses the "
- "address that this message was sent to.\n"
- "Please choose which account you want to "
- "use for sending the receipt notification:"),
- NULL, _("_Cancel"), NULL, _("_Send Notification"),
- NULL, NULL, ALERTFOCUS_FIRST, FALSE, optmenu);
-
- if (val != G_ALERTALTERNATE)
- return NULL;
- else
- return account_find_from_id(account_id);
-}
-
/*
* \brief return selected messageview text, when nothing is
* selected and message was filtered, return complete text
if (!mimeview
|| !mimeview->textview
|| !mimeview->textview->text)
- alertpanel_warning(_("Cannot print: the message doesn't "
- "contain text."));
+ alertpanel_warning("Cannot print: no message text");
else {
gtk_widget_realize(mimeview->textview->text);
if (partnum > 0) {
mimepart = mimeview_get_selected_part(mimeview);
if (mimepart == NULL
|| (mimepart->type != MIMETYPE_TEXT && mimepart->type != MIMETYPE_MESSAGE)) {
- alertpanel_warning(_("Cannot print: the message doesn't "
- "contain text."));
+ alertpanel_warning(_("Cannot print: non-text MIME part"));
return;
}
mimeview_show_part_as_text(mimeview, mimepart);
cm_menu_set_sensitive_full(messageview->ui_manager, "Menu/Message/CheckSignature", messageview->mimeview->signed_part);
}
-void messageview_learn (MessageView *msgview, gboolean is_spam)
-{
- if (is_spam) {
- if (procmsg_spam_learner_learn(msgview->msginfo, NULL, TRUE) == 0)
- procmsg_msginfo_set_flags(msgview->msginfo, MSG_SPAM, 0);
- else
- log_error(LOG_PROTOCOL, _("An error happened while learning.\n"));
-
- } else {
- if (procmsg_spam_learner_learn(msgview->msginfo, NULL, FALSE) == 0)
- procmsg_msginfo_unset_flags(msgview->msginfo, MSG_SPAM, 0);
- else
- log_error(LOG_PROTOCOL, _("An error happened while learning.\n"));
- }
- if (msgview->toolbar)
- toolbar_set_learn_button
- (msgview->toolbar,
- MSG_IS_SPAM(msgview->msginfo->flags)?LEARN_HAM:LEARN_SPAM);
- else
- toolbar_set_learn_button
- (msgview->mainwin->toolbar,
- MSG_IS_SPAM(msgview->msginfo->flags)?LEARN_HAM:LEARN_SPAM);
-}
-
static void save_part_as_cb(GtkAction *action, gpointer data)
{
MessageView *messageview = (MessageView *)data;
blob - 60277f4fde9af7167887c113dad46d80d070b543
blob + 7706c15bee311470f432bbe62801e3f179c7ea41
--- src/messageview.h
+++ src/messageview.h
gchar *messageview_get_selection (MessageView *msgview);
void messageview_set_menu_sensitive (MessageView *msgview);
-void messageview_learn (MessageView *msgview,
- gboolean is_spam);
+
void messageview_print (MsgInfo *msginfo,
gboolean all_headers,
gint sel_start,
blob - ee66ac01a702f24c8087456c6c48b5a40626216a
blob + b92e0bc9f331ec14e6a87fa2ab2374fdc358af1d
--- src/procmsg.c
+++ src/procmsg.c
return tmp_msginfo;
}
-static GSList *spam_learners = NULL;
-
-void procmsg_register_spam_learner (int (*learn_func)(MsgInfo *info, GSList *list, gboolean spam))
-{
- if (!g_slist_find(spam_learners, learn_func))
- spam_learners = g_slist_append(spam_learners, learn_func);
- if (mainwindow_get_mainwindow()) {
- main_window_set_menu_sensitive(mainwindow_get_mainwindow());
- summary_set_menu_sensitive(
- mainwindow_get_mainwindow()->summaryview);
- toolbar_main_set_sensitive(mainwindow_get_mainwindow());
- }
-}
-
-void procmsg_unregister_spam_learner (int (*learn_func)(MsgInfo *info, GSList *list, gboolean spam))
-{
- spam_learners = g_slist_remove(spam_learners, learn_func);
- if (mainwindow_get_mainwindow()) {
- main_window_set_menu_sensitive(mainwindow_get_mainwindow());
- summary_set_menu_sensitive(
- mainwindow_get_mainwindow()->summaryview);
- toolbar_main_set_sensitive(mainwindow_get_mainwindow());
- }
-}
-
-gboolean procmsg_spam_can_learn(void)
-{
- return g_slist_length(spam_learners) > 0;
-}
-
-int procmsg_spam_learner_learn (MsgInfo *info, GSList *list, gboolean spam)
-{
- GSList *cur = spam_learners;
- int ret = 0;
- for (; cur; cur = cur->next) {
- int ((*func)(MsgInfo *info, GSList *list, gboolean spam)) = cur->data;
- ret |= func(info, list, spam);
- }
- return ret;
-}
-
-static gchar *spam_folder_item = NULL;
-static FolderItem * (*procmsg_spam_get_folder_func)(MsgInfo *msginfo) = NULL;
-void procmsg_spam_set_folder (const char *item_identifier, FolderItem *(*spam_get_folder_func)(MsgInfo *info))
-{
- g_free(spam_folder_item);
- if (item_identifier)
- spam_folder_item = g_strdup(item_identifier);
- else
- spam_folder_item = NULL;
- if (spam_get_folder_func != NULL)
- procmsg_spam_get_folder_func = spam_get_folder_func;
- else
- procmsg_spam_get_folder_func = NULL;
-}
-
-FolderItem *procmsg_spam_get_folder (MsgInfo *msginfo)
-{
- FolderItem *item = NULL;
-
- if (procmsg_spam_get_folder_func)
- item = procmsg_spam_get_folder_func(msginfo);
- if (item == NULL && spam_folder_item)
- item = folder_find_item_from_identifier(spam_folder_item);
- if (item == NULL)
- item = folder_get_default_trash();
- return item;
-}
-
static void item_has_queued_mails(FolderItem *item, gpointer data)
{
gboolean *result = (gboolean *)data;
blob - 1bb15bcc1f2d6a97ecf4b33c4320cb6157f404af
blob + d2d6688f55cac2abf1c0cd561a1d568dc0043dbe
--- src/procmsg.h
+++ src/procmsg.h
(MsgInfo *src_msginfo,
MimeInfo *mimeinfo);
-void procmsg_register_spam_learner (int (*learn_func)(MsgInfo *info, GSList *list, gboolean spam));
-void procmsg_unregister_spam_learner (int (*learn_func)(MsgInfo *info, GSList *list, gboolean spam));
-gboolean procmsg_spam_can_learn (void);
-void procmsg_spam_set_folder (const char *item_identifier, FolderItem *(*spam_get_folder_func)(MsgInfo *info));
-FolderItem *procmsg_spam_get_folder (MsgInfo *msginfo);
-int procmsg_spam_learner_learn (MsgInfo *msginfo, GSList *msglist, gboolean spam);
gboolean procmsg_have_queued_mails_fast (void);
gboolean procmsg_have_trashed_mails_fast (void);
gboolean procmsg_is_sending(void);
blob - e2b305244ddf0d623b96e61416529eac88104e4f
blob + f647c8de150480bd8e974ad6d56e442232e73722
--- src/summaryview.c
+++ src/summaryview.c
MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menus/SummaryViewPopup/Marks", "WatchThread", "Message/Marks/WatchThread", GTK_UI_MANAGER_MENUITEM)
MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menus/SummaryViewPopup/Marks", "UnwatchThread", "Message/Marks/UnwatchThread", GTK_UI_MANAGER_MENUITEM)
MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menus/SummaryViewPopup/Marks", "Separator4", "Message/Marks/---", GTK_UI_MANAGER_SEPARATOR)
- MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menus/SummaryViewPopup/Marks", "MarkSpam", "Message/Marks/MarkSpam", GTK_UI_MANAGER_MENUITEM)
- MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menus/SummaryViewPopup/Marks", "MarkHam", "Message/Marks/MarkHam", GTK_UI_MANAGER_MENUITEM)
- MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menus/SummaryViewPopup/Marks", "Separator5", "Message/Marks/---", GTK_UI_MANAGER_SEPARATOR)
MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menus/SummaryViewPopup/Marks", "Lock", "Message/Marks/Lock", GTK_UI_MANAGER_MENUITEM)
MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menus/SummaryViewPopup/Marks", "Unlock", "Message/Marks/Unlock", GTK_UI_MANAGER_MENUITEM)
SET_SENSITIVE("Menus/SummaryViewPopup/Marks/UnwatchThread", M_TARGET_EXIST);
SET_SENSITIVE("Menus/SummaryViewPopup/Marks/Lock", M_TARGET_EXIST);
SET_SENSITIVE("Menus/SummaryViewPopup/Marks/Unlock", M_TARGET_EXIST);
- SET_SENSITIVE("Menus/SummaryViewPopup/Marks/MarkSpam", M_TARGET_EXIST, M_CAN_LEARN_SPAM);
- SET_SENSITIVE("Menus/SummaryViewPopup/Marks/MarkHam", M_TARGET_EXIST, M_CAN_LEARN_SPAM);
SET_SENSITIVE("Menus/SummaryViewPopup/View", M_SINGLE_TARGET_EXIST);
SET_SENSITIVE("Menus/SummaryViewPopup/View/OpenNewWindow", M_SINGLE_TARGET_EXIST);
summary_status_show(summaryview);
}
-void summary_mark_as_spam(SummaryView *summaryview, guint action, GtkWidget *widget)
-{
- GtkCMCTree *ctree = GTK_CMCTREE(summaryview->ctree);
- GList *cur;
- gboolean is_spam = action;
- GSList *msgs = NULL;
- gboolean immediate_exec = prefs_common.immediate_exec;
- gboolean moved = FALSE;
- gboolean froze = FALSE;
-
-
- if (summary_is_locked(summaryview))
- return;
-
- prefs_common.immediate_exec = FALSE;
- START_LONG_OPERATION(summaryview, FALSE);
- folder_item_set_batch(summaryview->folder_item, TRUE);
- for (cur = GTK_CMCLIST(ctree)->selection; cur != NULL && cur->data != NULL; cur = cur->next) {
- GtkCMCTreeNode *row = GTK_CMCTREE_NODE(cur->data);
- MsgInfo *msginfo = gtk_cmctree_node_get_row_data(ctree, row);
- if (msginfo)
- msgs = g_slist_prepend(msgs, msginfo);
- }
-
- if (procmsg_spam_learner_learn(NULL, msgs, is_spam) == 0) {
- for (cur = GTK_CMCLIST(ctree)->selection; cur != NULL && cur->data != NULL; cur = cur->next) {
- GtkCMCTreeNode *row = GTK_CMCTREE_NODE(cur->data);
- MsgInfo *msginfo = gtk_cmctree_node_get_row_data(ctree, row);
- if (!msginfo)
- continue;
- if (is_spam) {
- summary_msginfo_change_flags(msginfo, MSG_SPAM, 0, MSG_NEW|MSG_UNREAD, 0);
- if (procmsg_spam_get_folder(msginfo) != summaryview->folder_item) {
- summary_move_row_to(summaryview, row,
- procmsg_spam_get_folder(msginfo));
- moved = TRUE;
- }
- } else {
- summary_msginfo_unset_flags(msginfo, MSG_SPAM, 0);
- }
- summaryview->display_msg = prefs_common.always_show_msg;
-
- summary_set_row_marks(summaryview, row);
- }
- } else {
- log_error(LOG_PROTOCOL, _("An error happened while learning.\n"));
- }
-
- prefs_common.immediate_exec = immediate_exec;
- folder_item_set_batch(summaryview->folder_item, FALSE);
- END_LONG_OPERATION(summaryview);
-
- if (prefs_common.immediate_exec && moved) {
- summary_execute(summaryview);
- }
-
- if (!moved && msgs) {
- MsgInfo *msginfo = (MsgInfo *)msgs->data;
- toolbar_set_learn_button
- (summaryview->mainwin->toolbar,
- MSG_IS_SPAM(msginfo->flags)?LEARN_HAM:LEARN_SPAM);
- }
- g_slist_free(msgs);
-
- summary_status_show(summaryview);
-}
-
static gboolean check_permission(SummaryView *summaryview, MsgInfo * msginfo)
{
GList * cur;
GtkCMCTreeNode *sel_last = NULL;
GtkCMCTreeNode *node;
AlertValue aval;
- MsgInfo *msginfo;
gboolean froze = FALSE;
if (!item) return;
}
}
- for (cur = GTK_CMCLIST(ctree)->selection; cur != NULL && cur->data != NULL;
- cur = cur->next) {
- GtkCMCTreeNode *row = GTK_CMCTREE_NODE(cur->data);
- msginfo = gtk_cmctree_node_get_row_data(ctree, row);
- }
-
main_window_cursor_wait(summaryview->mainwin);
/* next code sets current row focus right. We need to find a row
cm_return_if_fail(msginfo != NULL);
main_create_mailing_list_menu (summaryview->mainwin, msginfo);
- toolbar_set_learn_button
- (summaryview->mainwin->toolbar,
- MSG_IS_SPAM(msginfo->flags)?LEARN_HAM:LEARN_SPAM);
switch (column < 0 ? column : summaryview->col_state[column].type) {
case S_COL_MARK:
if (MSG_IS_UNREAD(msginfo->flags)) {
summary_mark_row_as_read(summaryview, row);
summary_status_show(summaryview);
- } else if (MSG_IS_SPAM(msginfo->flags)) {
- if (procmsg_spam_learner_learn(msginfo, NULL, FALSE) == 0)
- summary_msginfo_unset_flags(msginfo, MSG_SPAM, 0);
- else
- log_error(LOG_PROTOCOL, _("An error happened while learning.\n"));
} else if (!MSG_IS_REPLIED(msginfo->flags) &&
!MSG_IS_FORWARDED(msginfo->flags)) {
marked_unread = TRUE;
gtk_drag_set_icon_default(context);
}
-static gboolean summary_return_to_list(void *data)
-{
- SummaryView *summaryview = (SummaryView *)data;
- mainwindow_enter_folder(summaryview->mainwin);
- return FALSE;
-}
-
static void summary_drag_end (GtkWidget *widget,
GdkDragContext *drag_context,
SummaryView *summaryview)
void summary_update_unread(SummaryView *summaryview, FolderItem *removed_item)
{
- guint new, unread, unreadmarked, marked, total;
- guint replied, forwarded, locked, ignored, watched;
static gboolean tips_initialized = FALSE;
if (!tips_initialized)
blob - 1f7d0bb6b21f4ba3d8b71174acbeaa5facdecdef
blob + 487aa25bbde1dea332d6a6efb6129b89886e459f
--- src/summaryview.h
+++ src/summaryview.h
void summary_msgs_unlock (SummaryView *summaryview);
void summary_mark_all_read (SummaryView *summaryview, gboolean ask_if_needed);
void summary_mark_all_unread (SummaryView *summaryview, gboolean ask_if_needed);
-void summary_mark_as_spam (SummaryView *summaryview,
- guint action,
- GtkWidget *widget);
void summary_ignore_thread (SummaryView *summaryview);
void summary_unignore_thread (SummaryView *summaryview);
void summary_watch_thread (SummaryView *summaryview);
blob - f943402ebe3a902ef816cc6429cb7213ea3035fa
blob + 989a26ab231879a8a5a74b3dc97fe1e99369da9f
--- src/toolbar.c
+++ src/toolbar.c
static void toolbar_reply (gpointer data,
guint action);
-static void toolbar_learn (gpointer data,
- guint action);
-
static void toolbar_delete_dup (gpointer data,
guint action);
static void toolbar_compose_cb (GtkWidget *widget,
gpointer data);
-static void toolbar_learn_cb (GtkWidget *widget,
- gpointer data);
-
static void toolbar_reply_cb (GtkWidget *widget,
gpointer data);
{ "A_RUN_PROCESSING", N_("Run folder processing rules") },
{ "A_PRINT", N_("Print") },
- { "A_LEARN_SPAM", N_("Learn Spam or Ham") },
{ "A_GO_FOLDERS", N_("Open folder/Go to folder list") },
{ "A_PREFERENCES", N_("Preferences") },
A_MARK, A_UNMARK, A_LOCK, A_UNLOCK,
A_ALL_READ, A_ALL_UNREAD, A_READ, A_UNREAD,
A_RUN_PROCESSING,
- A_PRINT, A_ADDRBOOK, A_LEARN_SPAM, A_GO_FOLDERS,
+ A_PRINT, A_ADDRBOOK, A_GO_FOLDERS,
A_CANCEL_INC, A_CANCEL_SEND, A_CANCEL_ALL, A_PREFERENCES };
for (i = 0; i < sizeof main_items / sizeof main_items[0]; i++) {
A_COMPOSE_EMAIL, A_REPLY_MESSAGE, A_REPLY_SENDER,
A_REPLY_ALL, A_REPLY_ML, A_FORWARD,
A_TRASH, A_DELETE_REAL, A_GOTO_PREV, A_GOTO_NEXT,
- A_ADDRBOOK, A_LEARN_SPAM, A_CLOSE };
+ A_ADDRBOOK, A_CLOSE };
for (i = 0; i < sizeof msgv_items / sizeof msgv_items[0]; i++)
items = g_list_append(items, gettext(toolbar_text[msgv_items[i]].descr));
case A_RECEIVE_CUR: return _("Get");
case A_SEND_QUEUED: return _("Send");
case A_COMPOSE_EMAIL: return C_("Toolbar", "Write");
- case A_COMPOSE_NEWS: return C_("Toolbar", "Write");
case A_REPLY_MESSAGE: return _("Reply");
case A_REPLY_SENDER: return C_("Toolbar", "Sender");
case A_REPLY_ALL: return _("All");
case A_RUN_PROCESSING: return _("Run proc. rules");
case A_PRINT: return _("Print");
- case A_LEARN_SPAM: return _("Spam");
case A_GO_FOLDERS: return _("Folders");
case A_PREFERENCES: return _("Preferences");
case A_RECEIVE_CUR: return STOCK_PIXMAP_MAIL_RECEIVE;
case A_SEND_QUEUED: return STOCK_PIXMAP_MAIL_SEND_QUEUE;
case A_COMPOSE_EMAIL: return STOCK_PIXMAP_MAIL_COMPOSE;
- case A_COMPOSE_NEWS: return STOCK_PIXMAP_NEWS_COMPOSE;
case A_REPLY_MESSAGE: return STOCK_PIXMAP_MAIL_REPLY;
case A_REPLY_SENDER: return STOCK_PIXMAP_MAIL_REPLY_TO_AUTHOR;
case A_REPLY_ALL: return STOCK_PIXMAP_MAIL_REPLY_TO_ALL;
case A_RUN_PROCESSING: return STOCK_PIXMAP_DIR_OPEN;
case A_PRINT: return STOCK_PIXMAP_PRINTER_BTN;
- case A_LEARN_SPAM: return STOCK_PIXMAP_SPAM_BTN;
case A_GO_FOLDERS: return STOCK_PIXMAP_GO_FOLDERS;
case A_PREFERENCES: return STOCK_PIXMAP_PREFERENCES;
{ A_FORWARD},
{ A_SEPARATOR},
{ A_TRASH},
- { A_LEARN_SPAM},
{ A_SEPARATOR},
{ A_GOTO_NEXT},
{ N_ACTION_VAL}
{ A_FORWARD},
{ A_SEPARATOR},
{ A_TRASH},
- { A_LEARN_SPAM},
{ A_GOTO_NEXT},
{ N_ACTION_VAL}
};
compose_btn_type);
}
-static void activate_learn_button (Toolbar *toolbar,
- ToolbarStyle style,
- LearnButtonType type)
-{
- if ((!toolbar->learn_spam_btn))
- return;
-
- if (type == LEARN_SPAM) {
- gtk_tool_button_set_icon_widget(
- GTK_TOOL_BUTTON(toolbar->learn_spam_btn),
- toolbar->learn_spam_icon);
- gtk_tool_button_set_label(
- GTK_TOOL_BUTTON(toolbar->learn_spam_btn),
- _("Spam"));
- CLAWS_SET_TOOL_ITEM_TIP(GTK_TOOL_ITEM(toolbar->learn_spam_btn), _("Learn spam"));
- gtk_widget_show(toolbar->learn_spam_icon);
- } else {
- gtk_tool_button_set_icon_widget(
- GTK_TOOL_BUTTON(toolbar->learn_spam_btn),
- toolbar->learn_ham_icon);
- gtk_tool_button_set_label(
- GTK_TOOL_BUTTON(toolbar->learn_spam_btn),
- _("Ham"));
- CLAWS_SET_TOOL_ITEM_TIP(GTK_TOOL_ITEM(toolbar->learn_spam_btn), _("Learn ham"));
- gtk_widget_show(toolbar->learn_ham_icon);
- }
- toolbar->learn_btn_type = type;
-}
-
-void toolbar_set_learn_button(Toolbar *toolbar,
- LearnButtonType learn_btn_type)
-{
- if (toolbar->learn_btn_type != learn_btn_type)
- activate_learn_button(toolbar,
- prefs_common.toolbar_style,
- learn_btn_type);
-}
-
void toolbar_toggle(guint action, gpointer data)
{
MainWindow *mainwin = (MainWindow*)data;
}
}
-static void toolbar_learn(gpointer data, guint as_spam)
-{
- ToolbarItem *toolbar_item = (ToolbarItem*)data;
- MainWindow *mainwin;
- MessageView *msgview;
-
- cm_return_if_fail(toolbar_item != NULL);
-
- switch (toolbar_item->type) {
- case TOOLBAR_MAIN:
- mainwin = (MainWindow*)toolbar_item->parent;
- if (as_spam)
- mainwindow_learn(mainwin, TRUE);
- else
- mainwindow_learn(mainwin, FALSE);
- break;
- case TOOLBAR_MSGVIEW:
- msgview = (MessageView*)toolbar_item->parent;
- if (as_spam)
- messageview_learn(msgview, TRUE);
- else
- messageview_learn(msgview, FALSE);
- break;
- default:
- debug_print("toolbar event not supported\n");
- }
-}
-
-static void toolbar_learn_cb(GtkWidget *widget, gpointer data)
-{
- ToolbarItem *toolbar_item = (ToolbarItem*)data;
- MainWindow *mainwin;
- MessageView *msgview;
-
- cm_return_if_fail(toolbar_item != NULL);
-
- switch (toolbar_item->type) {
- case TOOLBAR_MAIN:
- mainwin = (MainWindow*)toolbar_item->parent;
- if (mainwin->toolbar->learn_btn_type == LEARN_SPAM)
- mainwindow_learn(mainwin, TRUE);
- else
- mainwindow_learn(mainwin, FALSE);
- break;
- case TOOLBAR_MSGVIEW:
- msgview = (MessageView*)toolbar_item->parent;
- if (msgview->toolbar->learn_btn_type == LEARN_SPAM)
- messageview_learn(msgview, TRUE);
- else
- messageview_learn(msgview, FALSE);
- break;
- default:
- debug_print("toolbar event not supported\n");
- }
-}
-
-
/*
* Reply Message
*/
{ A_RECEIVE_CUR, toolbar_inc_cb },
{ A_SEND_QUEUED, toolbar_send_queued_cb },
{ A_COMPOSE_EMAIL, toolbar_compose_cb },
- { A_COMPOSE_NEWS, toolbar_compose_cb },
{ A_REPLY_MESSAGE, toolbar_reply_cb },
{ A_REPLY_SENDER, toolbar_reply_to_sender_cb },
{ A_REPLY_ALL, toolbar_reply_to_all_cb },
{ A_UNREAD, toolbar_unread_cb },
{ A_RUN_PROCESSING, toolbar_run_processing_cb },
{ A_PRINT, toolbar_print_cb },
- { A_LEARN_SPAM, toolbar_learn_cb },
{ A_DELETE_DUP, toolbar_delete_dup_cb },
{ A_GO_FOLDERS, toolbar_go_folders_cb },
toolbar_delete_dup(toolbar_item, GPOINTER_TO_INT(int_value));
}
-static void toolbar_learn_menu_cb(GtkWidget *widget, gpointer data)
-{
- gpointer int_value = g_object_get_data(G_OBJECT(widget), "int-value");
- ToolbarItem *toolbar_item = (ToolbarItem *)data;
-
- toolbar_learn(toolbar_item, GPOINTER_TO_INT(int_value));
-}
-
-
/**
* Create a new toolbar with specified type
* if a callback list is passed it will be used before the
GtkWidget *toolbar;
GtkWidget *icon_wid = NULL;
GtkWidget *icon_news;
- GtkWidget *icon_ham;
GtkWidget *item;
ToolbarClawsActions *action_item;
GSList *cur;
toolbar_data->compose_mail_btn = item;
toolbar_data->compose_mail_icon = icon_wid;
g_object_ref_sink(toolbar_data->compose_mail_icon);
-
- icon_news = stock_pixmap_widget(STOCK_PIXMAP_NEWS_COMPOSE);
- toolbar_data->compose_news_icon = icon_news;
- g_object_ref_sink(toolbar_data->compose_news_icon);
break;
- case A_LEARN_SPAM:
- TOOLBAR_MENUITEM(item,icon_wid,toolbar_item->text,
- _("Spam"),
- _("Learn as..."));
- toolbar_data->learn_spam_btn = item;
- toolbar_data->learn_spam_icon = icon_wid;
- g_object_ref_sink(toolbar_data->learn_spam_icon);
-
- icon_ham = stock_pixmap_widget(STOCK_PIXMAP_HAM_BTN);
- toolbar_data->learn_ham_icon = icon_ham;
- g_object_ref_sink(toolbar_data->learn_ham_icon);
-
- menu = gtk_menu_new();
- ADD_MENU_ITEM(_("Learn as _Spam"), toolbar_learn_menu_cb, TRUE);
- ADD_MENU_ITEM(_("Learn as _Ham"), toolbar_learn_menu_cb, FALSE);
- gtk_menu_tool_button_set_menu(GTK_MENU_TOOL_BUTTON(toolbar_data->learn_spam_btn), menu);
- break;
case A_DELETE_DUP:
TOOLBAR_MENUITEM(item,icon_wid,toolbar_item->text,
_("Delete duplicates"),
prefs_common.toolbar_style,
toolbar_data->compose_btn_type);
}
- if (type != TOOLBAR_COMPOSE)
- activate_learn_button(toolbar_data, prefs_common.toolbar_style,
- LEARN_SPAM);
gtk_container_add(GTK_CONTAINER(container), toolbar);
gtk_container_set_border_width(GTK_CONTAINER(container), 0);
void toolbar_destroy(Toolbar * toolbar)
{
UNREF_ICON(compose_mail_icon);
- UNREF_ICON(compose_news_icon);
- UNREF_ICON(learn_spam_icon);
- UNREF_ICON(learn_ham_icon);
TOOLBAR_DESTROY_ITEMS(toolbar->item_list);
TOOLBAR_DESTROY_ACTIONS(toolbar->action_list);
}
SET_WIDGET_COND(toolbar->exec_btn,
M_DELAY_EXEC);
- if (toolbar->learn_spam_btn)
- SET_WIDGET_COND(toolbar->learn_spam_btn,
- M_TARGET_EXIST, M_CAN_LEARN_SPAM, M_SUMMARY_ISLIST);
-
if (toolbar->cancel_inc_btn)
SET_WIDGET_COND(toolbar->cancel_inc_btn,
M_INC_ACTIVE);
toolbar->send_btn = NULL;
toolbar->compose_mail_btn = NULL;
toolbar->compose_mail_icon = NULL;
- toolbar->compose_news_icon = NULL;
toolbar->reply_btn = NULL;
toolbar->replysender_btn = NULL;
toolbar->replyall_btn = NULL;
toolbar->next_btn = NULL;
toolbar->exec_btn = NULL;
toolbar->separator = NULL;
- toolbar->learn_spam_btn = NULL;
- toolbar->learn_spam_icon = NULL;
- toolbar->learn_ham_icon = NULL;
toolbar->cancel_inc_btn = NULL;
toolbar->cancel_send_btn = NULL;
toolbar->cancel_all_btn = NULL;
return;
}
}
-
-void compose_news_cb(gpointer data, guint action, GtkWidget *widget)
-{
- fprintf(stderr, "TODO(otl): remove this\n");
-}
blob - 03d8c28e0f29680e7850484cd482285f2c90f3d5
blob + f00940c2a9c4d5bec263e830f73993cd39898aa5
--- src/toolbar.h
+++ src/toolbar.h
COMPOSEBUTTON_NEWS
} ComposeButtonType;
-typedef enum
-{
- LEARN_SPAM,
- LEARN_HAM
-} LearnButtonType;
-
struct _Toolbar {
GtkWidget *toolbar;
GtkWidget *compose_mail_btn;
GtkWidget *compose_mail_icon;
- GtkWidget *compose_news_icon;
GtkWidget *reply_btn;
GtkWidget *replysender_btn;
GtkWidget *exec_btn;
GtkWidget *separator;
- GtkWidget *learn_spam_btn;
- GtkWidget *learn_spam_icon;
- GtkWidget *learn_ham_icon;
GtkWidget *cancel_inc_btn;
GtkWidget *cancel_send_btn;
GtkWidget *cancel_all_btn;
ComposeButtonType compose_btn_type;
- LearnButtonType learn_btn_type;
/* compose buttons */
GtkWidget *sendl_btn;
A_RECEIVE_CUR,
A_SEND_QUEUED,
A_COMPOSE_EMAIL,
- A_COMPOSE_NEWS,
A_REPLY_MESSAGE,
A_REPLY_SENDER,
A_REPLY_ALL,
A_RUN_PROCESSING,
A_PRINT,
- A_LEARN_SPAM,
A_GO_FOLDERS,
A_PREFERENCES,
void toolbar_destroy (Toolbar *toolbar);
void toolbar_item_destroy (ToolbarItem *toolbar_item);
-void toolbar_set_learn_button (Toolbar *toolbar,
- LearnButtonType learn_btn_type);
const gchar *toolbar_get_short_text (int action);
int toolbar_get_icon (int action);
gboolean toolbar_check_action_btns (ToolbarType type);