+2006-02-27 [cleroy] 2.0.0cvs84
+
+ * configure.ac
+ * src/Makefile.am
+ * src/mainwindow.c
+ * src/mainwindow.h
+ * src/messageview.c
+ * src/messageview.h
+ * src/prefs_toolbar.c
+ * src/procmsg.c
+ * src/stock_pixmap.c
+ * src/stock_pixmap.h
+ * src/summaryview.c
+ * src/toolbar.c
+ * src/toolbar.h
+ * src/pixmaps/ham_btn.xpm
+ * src/pixmaps/spam.xpm
+ * src/pixmaps/spam_btn.xpm
+ * src/plugins/spamassassin/spamassassin.c
+ Add button in toolbar for spam learning
+ Fix a few bugs from the last related commit
+ Revert 1.9.6cvs23 which messed up shift-selection
+
2006-02-24 [colin] 2.0.0cvs83
* src/procmsg.c
( cvs diff -u -r 1.382.2.246 -r 1.382.2.247 src/compose.c; cvs diff -u -r 1.50.2.21 -r 1.50.2.22 src/compose.h; cvs diff -u -r 1.60.2.13 -r 1.60.2.14 src/filtering.c; ) > 2.0.0cvs81.patchset
( cvs diff -u -r 1.155.2.35 -r 1.155.2.36 src/Makefile.am; cvs diff -u -r 1.274.2.99 -r 1.274.2.100 src/mainwindow.c; cvs diff -u -r 1.39.2.12 -r 1.39.2.13 src/mainwindow.h; cvs diff -u -r 1.150.2.51 -r 1.150.2.52 src/procmsg.c; cvs diff -u -r 1.60.2.23 -r 1.60.2.24 src/procmsg.h; cvs diff -u -r 1.25.2.20 -r 1.25.2.21 src/stock_pixmap.c; cvs diff -u -r 1.18.2.14 -r 1.18.2.15 src/stock_pixmap.h; cvs diff -u -r 1.395.2.173 -r 1.395.2.174 src/summaryview.c; cvs diff -u -r 1.68.2.15 -r 1.68.2.16 src/summaryview.h; cvs diff -u -r 1.1.2.6 -r 1.1.2.7 src/gtk/icon_legend.c; diff -u /dev/null src/pixmaps/spam.xpm; cvs diff -u -r 1.18.2.17 -r 1.18.2.18 src/plugins/spamassassin/spamassassin.c; cvs diff -u -r 1.23.2.18 -r 1.23.2.19 src/plugins/spamassassin/spamassassin_gtk.c; ) > 2.0.0cvs82.patchset
( cvs diff -u -r 1.150.2.52 -r 1.150.2.53 src/procmsg.c; cvs diff -u -r 1.395.2.174 -r 1.395.2.175 src/summaryview.c; cvs diff -u -r 1.68.2.16 -r 1.68.2.17 src/summaryview.h; cvs diff -u -r 1.18.2.18 -r 1.18.2.19 src/plugins/spamassassin/spamassassin.c; cvs diff -u -r 1.4.2.6 -r 1.4.2.7 src/plugins/spamassassin/spamassassin.h; cvs diff -u -r 1.23.2.19 -r 1.23.2.20 src/plugins/spamassassin/spamassassin_gtk.c; ) > 2.0.0cvs83.patchset
+( cvs diff -u -r 1.654.2.1313 -r 1.654.2.1314 configure.ac; cvs diff -u -r 1.155.2.36 -r 1.155.2.37 src/Makefile.am; cvs diff -u -r 1.274.2.100 -r 1.274.2.101 src/mainwindow.c; cvs diff -u -r 1.39.2.13 -r 1.39.2.14 src/mainwindow.h; cvs diff -u -r 1.94.2.77 -r 1.94.2.78 src/messageview.c; cvs diff -u -r 1.19.2.6 -r 1.19.2.7 src/messageview.h; cvs diff -u -r 1.30.2.25 -r 1.30.2.26 src/prefs_toolbar.c; cvs diff -u -r 1.150.2.53 -r 1.150.2.54 src/procmsg.c; cvs diff -u -r 1.25.2.21 -r 1.25.2.22 src/stock_pixmap.c; cvs diff -u -r 1.18.2.15 -r 1.18.2.16 src/stock_pixmap.h; cvs diff -u -r 1.395.2.175 -r 1.395.2.176 src/summaryview.c; cvs diff -u -r 1.43.2.39 -r 1.43.2.40 src/toolbar.c; cvs diff -u -r 1.19.2.8 -r 1.19.2.9 src/toolbar.h; diff -u /dev/null src/pixmaps/ham_btn.xpm; cvs diff -u -r 1.1.2.1 -r 1.1.2.2 src/pixmaps/spam.xpm; diff -u /dev/null src/pixmaps/spam_btn.xpm; cvs diff -u -r 1.18.2.19 -r 1.18.2.20 src/plugins/spamassassin/spamassassin.c; ) > 2.0.0cvs84.patchset
MICRO_VERSION=0
INTERFACE_AGE=0
BINARY_AGE=0
-EXTRA_VERSION=83
+EXTRA_VERSION=84
EXTRA_RELEASE=
EXTRA_GTK2_VERSION=
AC_MSG_RESULT(yes)
AC_SPAMASSASSIN
PLUGINS="spamassassin $PLUGINS"
+ AC_DEFINE(USE_SPAMASSASSIN_PLUGIN, 1, Define if spamassassin plugin is being build.)
else
AC_MSG_RESULT(no)
fi
pixmaps/forwarded.xpm \
pixmaps/gpg_signed.xpm \
pixmaps/group.xpm \
+ pixmaps/ham_btn.xpm \
pixmaps/ignorethread.xpm \
pixmaps/inbox_hrm.xpm \
pixmaps/inbox.xpm \
pixmaps/replied.xpm \
pixmaps/search.xpm \
pixmaps/spam.xpm \
+ pixmaps/spam_btn.xpm \
pixmaps/sylpheed_icon.xpm \
pixmaps/sylpheed_logo.xpm \
pixmaps/sylpheed.xpm \
mainwin->toolbar = toolbar_create(TOOLBAR_MAIN,
handlebox,
(gpointer)mainwin);
+ toolbar_set_learn_button
+ (mainwin->toolbar,
+ LEARN_SPAM);
/* vbox that contains body */
vbox_body = gtk_vbox_new(FALSE, BORDER_WIDTH);
mainwindow_check_synchronise(mainwin, FALSE);
}
-/*
-* End of Source.
-*/
-
+void mainwindow_learn (MainWindow *mainwin, gboolean is_spam)
+{
+ summary_mark_as_spam(mainwin->summaryview, is_spam, NULL);
+}
GdkEventKey *event,
gpointer data);
MainWindow *mainwindow_get_mainwindow (void);
+void mainwindow_learn (MainWindow *mainwin,
+ gboolean is_spam);
#endif /* __MAINWINDOW_H__ */
gchar *subject = NULL;
g_return_val_if_fail(msginfo != NULL, -1);
+ 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_ham_btn)
+ gtk_widget_set_sensitive(
+ messageview->toolbar->learn_ham_btn,
+ procmsg_spam_can_learn());
+ if (messageview->toolbar->learn_spam_btn)
+ gtk_widget_set_sensitive(
+ messageview->toolbar->learn_spam_btn,
+ procmsg_spam_can_learn());
+ }
mimeinfo = procmime_scan_message(msginfo);
if (!mimeinfo) {
textview_show_error(messageview->mimeview->textview);
messageview->mimeview->textview->show_all_headers);
}
}
+
+void messageview_learn (MessageView *msgview, gboolean is_spam)
+{
+ if (is_spam) {
+ procmsg_msginfo_set_flags(msgview->msginfo, MSG_SPAM, 0);
+ procmsg_spam_learner_learn(msgview->msginfo, NULL, TRUE);
+ } else {
+ procmsg_msginfo_unset_flags(msgview->msginfo, MSG_SPAM, 0);
+ procmsg_spam_learner_learn(msgview->msginfo, NULL, FALSE);
+ }
+ 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);
+}
gchar *messageview_get_selection (MessageView *msgview);
void messageview_set_menu_sensitive (MessageView *msgview);
+void messageview_learn (MessageView *msgview,
+ gboolean is_spam);
#endif /* __MESSAGEVIEW_H__ */
--- /dev/null
+/* XPM */
+static char * ham_btn_xpm[] = {
+"24 24 47 1",
+" c None",
+". c #999999",
+"+ c #000000",
+"@ c #929292",
+"# c #535353",
+"$ c #FFFFFF",
+"% c #FEFEFE",
+"& c #FDFDFD",
+"* c #FCFCFC",
+"= c #FBFBFB",
+"- c #F9F9F9",
+"; c #F8F8F8",
+"> c #F7F7F7",
+", c #F6F6F6",
+"' c #F5F5F5",
+") c #F4F4F4",
+"! c #E3E3E3",
+"~ c #EEEEEE",
+"{ c #4F4F4F",
+"] c #F3F3F3",
+"^ c #F2F2F2",
+"/ c #F1F1F1",
+"( c #F0F0F0",
+"_ c #EFEFEF",
+": c #EDEDED",
+"< c #AEAEAE",
+"[ c #E4E4E4",
+"} c #434343",
+"| c #ACACAC",
+"1 c #C8C8C8",
+"2 c #A0A0A0",
+"3 c #D4D4D4",
+"4 c #ECECEC",
+"5 c #959595",
+"6 c #3E3E3E",
+"7 c #4D4D4D",
+"8 c #818181",
+"9 c #C6C6C6",
+"0 c #6A6A6A",
+"a c #A7A7A7",
+"b c #636363",
+"c c #B9B9B9",
+"d c #606060",
+"e c #FFD10D",
+"f c #737373",
+"g c #7C7C7C",
+"h c #BCBCBC",
+" ",
+" ",
+" ",
+" ",
+" ",
+" .+++++++++++++++++@ ",
+" +#$$$$%&*=-;>,')!#+ ",
+" +~{$')]^^/((_~:!{<+ ",
+" +$[}&]^^/(_~~:!{|1+ ",
+" +$'[{=/((_~::!}231+ ",
+" +$='[};(_~:4!{53[1+ ",
+" +$'''[6'~:4!789[[1+ ",
+" +$=''[0}]447a++++++ ",
+" +$''[b$c{(7ddeeeeedd ",
+" +$=[b$'[3{adeeeeeeeda ",
+" +$[f$'''''+ee+eee+ee+ ",
+" +$g$[[[[[[+eeeeeeeee+ ",
+" +fhhhhhhhh+eeeeeeeee+ ",
+" @++++++++++eeeeeeeee+ ",
+" +ee+eee+ee+ ",
+" adee+++eeda ",
+" ddeeeeedd ",
+" a+++++a ",
+" "};
/* XPM */
static char * spam_xpm[] = {
-"10 10 4 1",
+"10 10 7 1",
" c None",
-". c #DF0B18",
-"+ c #CC0000",
-"@ c #D5050C",
+". c #606060",
+"+ c #130303",
+"@ c #454343",
+"# c #000000",
+"$ c #0A0A0A",
+"% c #FFD10D",
" .++++. ",
-" ++....+@ ",
-".+. .++.",
-"+. .+..+",
-"+. .+. .+",
-"+. .+. .+",
-"+..+. .+",
-".++. .+.",
-" ++....++ ",
+" @#####$@ ",
+".########.",
+"+##%##%##+",
+"+########+",
+"+########+",
+"+###%%###+",
+".##%##%##.",
+" @######@ ",
" .++++. "};
--- /dev/null
+/* XPM */
+static char * spam_btn_xpm[] = {
+"24 24 48 1",
+" c None",
+". c #999999",
+"+ c #000000",
+"@ c #929292",
+"# c #535353",
+"$ c #FFFFFF",
+"% c #FEFEFE",
+"& c #FDFDFD",
+"* c #FCFCFC",
+"= c #FBFBFB",
+"- c #F9F9F9",
+"; c #F8F8F8",
+"> c #F7F7F7",
+", c #F6F6F6",
+"' c #F5F5F5",
+") c #F4F4F4",
+"! c #E3E3E3",
+"~ c #EEEEEE",
+"{ c #4F4F4F",
+"] c #F3F3F3",
+"^ c #F2F2F2",
+"/ c #F1F1F1",
+"( c #F0F0F0",
+"_ c #EFEFEF",
+": c #EDEDED",
+"< c #AEAEAE",
+"[ c #E4E4E4",
+"} c #434343",
+"| c #ACACAC",
+"1 c #C8C8C8",
+"2 c #A0A0A0",
+"3 c #D4D4D4",
+"4 c #ECECEC",
+"5 c #959595",
+"6 c #3E3E3E",
+"7 c #4D4D4D",
+"8 c #818181",
+"9 c #C6C6C6",
+"0 c #6A6A6A",
+"a c #868686",
+"b c #1E1E1E",
+"c c #636363",
+"d c #B9B9B9",
+"e c #333333",
+"f c #737373",
+"g c #FFD10D",
+"h c #7C7C7C",
+"i c #BCBCBC",
+" ",
+" ",
+" ",
+" ",
+" ",
+" .+++++++++++++++++@ ",
+" +#$$$$%&*=-;>,')!#+ ",
+" +~{$')]^^/((_~:!{<+ ",
+" +$[}&]^^/(_~~:!{|1+ ",
+" +$'[{=/((_~::!}231+ ",
+" +$='[};(_~:4!{53[1+ ",
+" +$'''[6'~:4!789[[1+ ",
+" +$=''[0}]447a++++b+ ",
+" +$''[c$d{(7ee+++++ee ",
+" +$=[c$'[3{ae+++++++ea ",
+" +$[f$'''''+++g+++g+++ ",
+" +$h$[[[[[[+++++++++++ ",
+" +fiiiiiiii+++++++++++ ",
+" @+++++++++++++ggg++++ ",
+" +++g+++g+++ ",
+" ae+++++++ea ",
+" ee+++++ee ",
+" a+++++a ",
+" "};
#include "libspamc.h"
#include "spamassassin.h"
+#include "log.h"
+#include "prefs_common.h"
#ifdef HAVE_SYSEXITS_H
#include <sysexits.h>
file = procmsg_get_message_file(msginfo);
if (file == NULL)
return;
- cmd = g_strdup_printf("sa-learn %s %s",
+ cmd = g_strdup_printf("sa-learn %s %s %s",
+ prefs_common.work_offline?"-L":"",
spam?"--spam":"--ham", file);
}
if (msglist) {
g_list_free(syl_actions);
}
- for (i = 0; i < STOCK_PIXMAP_SYLPHEED_LOGO; i++) {
+ for (i = 0; i < STOCK_PIXMAP_EMPTY; i++) {
GdkPixbuf *pixbuf;
+ if (i == STOCK_PIXMAP_SYLPHEED_LOGO)
+ continue;/* that's too big */
stock_pixbuf_gdk(prefs_toolbar->window, i, &pixbuf);
main_window_set_menu_sensitive(mainwindow_get_mainwindow());
summary_set_menu_sensitive(
mainwindow_get_mainwindow()->summaryview);
+ toolbar_main_set_sensitive(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());
}
}
#include "pixmaps/drafts_open_mark.xpm"
#include "pixmaps/dir_noselect.xpm"
#include "pixmaps/spam.xpm"
+#include "pixmaps/spam_btn.xpm"
+#include "pixmaps/ham_btn.xpm"
#include "pixmaps/empty.xpm"
typedef struct _StockPixmapData StockPixmapData;
{sylpheed_logo_xpm , NULL, NULL, "sylpheed_logo", NULL},
{dir_noselect_xpm , NULL, NULL, "dir_noselect" , NULL},
{spam_xpm , NULL, NULL, "spam" , NULL},
+ {spam_btn_xpm , NULL, NULL, "spam_btn" , NULL},
+ {ham_btn_xpm , NULL, NULL, "ham_btn" , NULL},
{empty_xpm , NULL, NULL, "empty" , NULL}
};
STOCK_PIXMAP_SYLPHEED_LOGO,
STOCK_PIXMAP_DIR_NOSELECT,
STOCK_PIXMAP_SPAM,
+ STOCK_PIXMAP_SPAM_BTN,
+ STOCK_PIXMAP_HAM_BTN,
STOCK_PIXMAP_EMPTY, /* last entry */
N_STOCK_PIXMAPS
} StockPixmap;
gboolean is_spam = action;
GSList *msgs = NULL;
gboolean immediate_exec = prefs_common.immediate_exec;
-
+ gboolean moved = FALSE;
prefs_common.immediate_exec = FALSE;
START_LONG_OPERATION(summaryview);
MsgInfo *msginfo = gtk_ctree_node_get_row_data(ctree, row);
if (is_spam) {
summary_msginfo_change_flags(msginfo, MSG_SPAM, 0, MSG_NEW|MSG_UNREAD, 0);
- summary_move_row_to(summaryview, row, procmsg_spam_get_folder());
+ if (procmsg_spam_get_folder() != summaryview->folder_item) {
+ summary_move_row_to(summaryview, row, procmsg_spam_get_folder());
+ moved = TRUE;
+ }
} else {
summary_msginfo_unset_flags(msginfo, MSG_SPAM, 0);
}
END_LONG_OPERATION(summaryview);
- if (prefs_common.immediate_exec) {
+ if (prefs_common.immediate_exec && moved) {
summary_execute(summaryview);
}
case GDK_Escape:
gtk_widget_grab_focus(summaryview->folderview->ctree);
return TRUE;
+ case GDK_Up:
+ case GDK_Down:
+ if ((node = summaryview->selected) != NULL) {
+ GtkCTreeNode *next = NULL;
+ do {
+ next = (event->keyval == GDK_Down)
+ ? gtkut_ctree_node_next(ctree, next ? next:node)
+ : gtkut_ctree_node_prev(ctree, next ? next:node);
+ } while (next && !gtk_ctree_is_viewable(ctree, next));
+
+ if (next) {
+ gtk_sctree_select_with_state
+ (GTK_SCTREE(ctree), next, event->state);
+
+ /* Deprecated - what are the non-deprecated equivalents? */
+ if (gtk_ctree_node_is_visible(GTK_CTREE(ctree), next) != GTK_VISIBILITY_FULL)
+ gtk_ctree_node_moveto(GTK_CTREE(ctree), next, 0, 0, 0);
+ summaryview->selected = next;
+ }
+ }
+ return TRUE;
case GDK_Home:
case GDK_End:
if ((node = summaryview->selected) != NULL) {
msginfo = gtk_ctree_node_get_row_data(ctree, row);
g_return_if_fail(msginfo != NULL);
+ 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_DELETED(msginfo->flags) &&
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_GOTO_NEXT", N_("Go to Next Unread Message") },
{ "A_IGNORE_THREAD", N_("Ignore thread") },
{ "A_PRINT", N_("Print") },
+ { "A_LEARN_SPAM", N_("Learn Spam") },
+ { "A_LEARN_HAM", N_("Learn Ham") },
{ "A_SEND", N_("Send Message") },
{ "A_SENDL", N_("Put into queue folder and send later") },
A_REPLY_ALL, A_REPLY_ML, A_FORWARD,
A_TRASH , A_DELETE_REAL, A_EXECUTE, A_GOTO_PREV,
A_GOTO_NEXT, A_IGNORE_THREAD, A_PRINT,
- A_ADDRBOOK, A_SYL_ACTIONS };
+ A_ADDRBOOK, A_LEARN_SPAM, A_SYL_ACTIONS };
for (i = 0; i < sizeof main_items / sizeof main_items[0]; i++) {
items = g_list_append(items, gettext(toolbar_text[main_items[i]].descr));
gint msgv_items[] = { 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_SYL_ACTIONS };
+ A_ADDRBOOK, A_LEARN_SPAM, A_SYL_ACTIONS };
for (i = 0; i < sizeof msgv_items / sizeof msgv_items[0]; i++)
items = g_list_append(items, gettext(toolbar_text[msgv_items[i]].descr));
{ A_FORWARD, STOCK_PIXMAP_MAIL_FORWARD, _("Forward") },
{ A_SEPARATOR, 0, ("") },
{ A_TRASH, STOCK_PIXMAP_TRASH, _("Trash") },
+#ifdef USE_SPAMASSASSIN_PLUGIN
+ { A_LEARN_SPAM, STOCK_PIXMAP_SPAM_BTN, _("Spam") },
+#endif
{ A_SEPARATOR, 0, ("") },
{ A_GOTO_NEXT, STOCK_PIXMAP_DOWN_ARROW, _("Next") }
};
{ A_FORWARD, STOCK_PIXMAP_MAIL_FORWARD, _("Forward") },
{ A_SEPARATOR, 0, ("") },
{ A_TRASH, STOCK_PIXMAP_TRASH, _("Trash") },
+#ifdef USE_SPAMASSASSIN_PLUGIN
+ { A_LEARN_SPAM, STOCK_PIXMAP_SPAM_BTN, _("Spam") },
+#endif
{ A_GOTO_NEXT, STOCK_PIXMAP_DOWN_ARROW, _("Next") }
};
compose_btn_type);
}
+static void activate_learn_button (Toolbar *toolbar,
+ ToolbarStyle style,
+ LearnButtonType type)
+{
+ if ((!toolbar->learn_spam_btn) || (!toolbar->learn_ham_btn))
+ return;
+
+ gtk_widget_hide(type == LEARN_SPAM ? toolbar->learn_ham_btn
+ : toolbar->learn_spam_btn);
+ gtk_widget_show(type == LEARN_SPAM ? toolbar->learn_spam_btn
+ : toolbar->learn_ham_btn);
+ 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_cb(GtkWidget *widget, gpointer data)
+{
+ ToolbarItem *toolbar_item = (ToolbarItem*)data;
+ MainWindow *mainwin;
+ MessageView *msgview;
+
+ g_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_GOTO_NEXT, toolbar_next_unread_cb },
{ A_IGNORE_THREAD, toolbar_ignore_thread_cb },
{ A_PRINT, toolbar_print_cb },
+ { A_LEARN_SPAM, toolbar_learn_cb },
+ { A_LEARN_HAM, toolbar_learn_cb },
{ A_SEND, toolbar_send_cb },
{ A_SENDL, toolbar_send_later_cb },
GtkWidget *toolbar;
GtkWidget *icon_wid = NULL;
GtkWidget *icon_news;
+ GtkWidget *icon_ham;
GtkWidget *item;
GtkWidget *item_news;
-
+ GtkWidget *item_ham;
guint n_menu_entries;
ComboButton *getall_combo;
ComboButton *reply_combo;
toolbar_data->item_list =
g_slist_append(toolbar_data->item_list,
toolbar_item);
-
icon_wid = stock_pixmap_widget(container, stock_pixmap_get_icon(toolbar_item->file));
item = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
toolbar_item->text,
toolbar_data->compose_news_btn,
_("Compose News"), NULL);
break;
+ case A_LEARN_SPAM:
+ icon_ham = stock_pixmap_widget(container, STOCK_PIXMAP_HAM_BTN);
+ item_ham = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
+ _("Ham"),
+ (""),
+ (""),
+ icon_ham, G_CALLBACK(toolbar_buttons_cb),
+ toolbar_item);
+ toolbar_data->learn_spam_btn = item;
+ gtk_tooltips_set_tip(GTK_TOOLTIPS(toolbar_tips),
+ toolbar_data->learn_spam_btn,
+ _("Learn Spam"), NULL);
+ toolbar_data->learn_ham_btn = item_ham;
+ gtk_tooltips_set_tip(GTK_TOOLTIPS(toolbar_tips),
+ toolbar_data->learn_ham_btn,
+ _("Learn Ham"), NULL);
+ break;
case A_REPLY_MESSAGE:
toolbar_data->reply_btn = item;
gtk_tooltips_set_tip(GTK_TOOLTIPS(toolbar_tips),
activate_compose_button(toolbar_data,
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_widget_show_all(toolbar);
} else {
SET_WIDGET_COND(toolbar->next_btn, 0);
}
-
- SET_WIDGET_COND(toolbar->trash_btn,
+
+ if (toolbar->trash_btn)
+ SET_WIDGET_COND(toolbar->trash_btn,
M_TARGET_EXIST|M_ALLOW_DELETE);
- SET_WIDGET_COND(toolbar->delete_btn,
+ if (toolbar->delete_btn)
+ SET_WIDGET_COND(toolbar->delete_btn,
M_TARGET_EXIST|M_ALLOW_DELETE);
- SET_WIDGET_COND(toolbar->exec_btn, M_DELAY_EXEC);
+ if (toolbar->exec_btn)
+ SET_WIDGET_COND(toolbar->exec_btn, M_DELAY_EXEC);
+
+ if (toolbar->learn_ham_btn)
+ SET_WIDGET_COND(toolbar->learn_ham_btn, M_TARGET_EXIST|M_CAN_LEARN_SPAM);
+ if (toolbar->learn_spam_btn)
+ SET_WIDGET_COND(toolbar->learn_spam_btn, M_TARGET_EXIST|M_CAN_LEARN_SPAM);
for (cur = toolbar->action_list; cur != NULL; cur = cur->next) {
ToolbarSylpheedActions *act = (ToolbarSylpheedActions*)cur->data;
COMPOSEBUTTON_NEWS
} ComposeButtonType;
+typedef enum
+{
+ LEARN_SPAM,
+ LEARN_HAM
+} LearnButtonType;
+
struct _Toolbar {
GtkWidget *toolbar;
GtkWidget *exec_btn;
GtkWidget *separator;
+ GtkWidget *learn_spam_btn;
+ GtkWidget *learn_ham_btn;
-
ComposeButtonType compose_btn_type;
+ LearnButtonType learn_btn_type;
/* compose buttons */
GtkWidget *sendl_btn;
A_GOTO_NEXT,
A_IGNORE_THREAD,
A_PRINT,
+ A_LEARN_SPAM,
+ A_LEARN_HAM,
/* compose toolbar */
A_SEND,
guint action);
void toolbar_destroy (Toolbar *toolbar);
void toolbar_init (Toolbar *toolbar);
+void toolbar_set_learn_button (Toolbar *toolbar,
+ LearnButtonType learn_btn_type);
#endif /* __CUSTOM_TOOLBAR_H__ */