talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

commit f806a49d36959a9320108485fc712db5a04e3962
parent 9fc2c3acb34df62339ea9daa8fe4eb569a1b8f7f
Author: wwp <wwp@free.fr>
Date:   Thu, 19 Jan 2017 14:49:06 +0100

Add "Delete duplicates" (delete duplicated messages in current folder) to
the main window's toolbar, including a brand new (not so shining) icon.

Diffstat:
Msrc/Makefile.am | 1+
Msrc/mainwindow.c | 8++++++--
Msrc/mainwindow.h | 1+
Asrc/pixmaps/delete_dup_btn.xpm | 33+++++++++++++++++++++++++++++++++
Msrc/prefs_toolbar.c | 1+
Msrc/stock_pixmap.c | 3++-
Msrc/stock_pixmap.h | 1+
Msrc/toolbar.c | 57++++++++++++++++++++++++++++++++++++++++++++++++---------
Msrc/toolbar.h | 2++
9 files changed, 95 insertions(+), 12 deletions(-)

diff --git a/src/Makefile.am b/src/Makefile.am @@ -399,6 +399,7 @@ EXTRA_DIST = \ pixmaps/continue.xpm \ pixmaps/copied.xpm \ pixmaps/delete_btn.xpm \ + pixmaps/delete_dup_btn.xpm \ pixmaps/deleted.xpm \ pixmaps/dir_close.xpm \ pixmaps/dir_close_hrm.xpm \ diff --git a/src/mainwindow.c b/src/mainwindow.c @@ -4694,9 +4694,8 @@ static void attract_by_subject_cb(GtkAction *action, gpointer data) summary_attract_by_subject(mainwin->summaryview); } -static void delete_duplicated_cb(GtkAction *action, gpointer data) +void mainwindow_delete_duplicated(MainWindow *mainwin) { - MainWindow *mainwin = (MainWindow *)data; FolderItem *item; item = folderview_get_selected_item(mainwin->folderview); @@ -4712,6 +4711,11 @@ static void delete_duplicated_cb(GtkAction *action, gpointer data) } } +static void delete_duplicated_cb(GtkAction *action, gpointer data) +{ + mainwindow_delete_duplicated((MainWindow *)data); +} + struct DelDupsData { guint dups; diff --git a/src/mainwindow.h b/src/mainwindow.h @@ -216,6 +216,7 @@ void mainwindow_jump_to (const gchar *target, gboolean popup); void mainwindow_show_error (void); void mainwindow_clear_error (MainWindow *mainwin); +void mainwindow_delete_duplicated (MainWindow *mainwin); gboolean mainwindow_is_obscured (void); void mainwindow_exit_folder (MainWindow *mainwin); void mainwindow_enter_folder (MainWindow *mainwin); diff --git a/src/pixmaps/delete_dup_btn.xpm b/src/pixmaps/delete_dup_btn.xpm @@ -0,0 +1,33 @@ +/* XPM */ +static char * delete_dup_btn_xpm[] = { +"24 24 6 1", +" c None", +". c #000000", +"+ c #808080", +"@ c #FFFFFF", +"# c #FF0000", +"$ c #E00000", +" ", +" ", +" ..... ", +".+@@@+. ", +".@+@+@. ", +".@@+@@. ", +".@@@@@. ", +" ..... .. ", +" .#. ", +" ..... ....##. ..... ", +".+@@@+. .######. .+@@@+.", +".@+@+@. .######$..@+@+@.", +".@@+@@. .######. .@@+@@.", +".@@@@@. ....##. .@@@@@.", +" ..... .#. ..... ", +" .. ", +" ..... ", +".+@@@+. ", +".@+@+@. ", +".@@+@@. ", +".@@@@@. ", +" ..... ", +" ", +" "}; diff --git a/src/prefs_toolbar.c b/src/prefs_toolbar.c @@ -145,6 +145,7 @@ static const gint ToolbarIcons[] = STOCK_PIXMAP_HAM_BTN, STOCK_PIXMAP_TRASH, STOCK_PIXMAP_DELETE, + STOCK_PIXMAP_DELETE_DUP, STOCK_PIXMAP_CANCEL, STOCK_PIXMAP_MARK_IGNORETHREAD, STOCK_PIXMAP_MARK_WATCHTHREAD, diff --git a/src/stock_pixmap.c b/src/stock_pixmap.c @@ -133,7 +133,6 @@ #include "pixmaps/mime_message.xpm" #include "pixmaps/address_search.xpm" #include "pixmaps/check_spelling.xpm" - #include "pixmaps/dir_close.xpm" #include "pixmaps/dir_close_hrm.xpm" #include "pixmaps/dir_open.xpm" @@ -149,6 +148,7 @@ #include "pixmaps/trash_open.xpm" #include "pixmaps/trash_close.xpm" #include "pixmaps/delete_btn.xpm" +#include "pixmaps/delete_dup_btn.xpm" #include "pixmaps/cancel.xpm" #include "pixmaps/trash_btn.xpm" #include "pixmaps/trash_open_hrm.xpm" @@ -402,6 +402,7 @@ static StockPixmapData pixmaps[] = {claws_mail_icon_64_xpm , NULL, NULL, "claws_mail_icon_64", NULL, NULL}, {read_xpm , NULL, NULL, "read", NULL, NULL}, {delete_btn_xpm , NULL, NULL, "delete_btn", NULL, NULL}, + {delete_dup_btn_xpm , NULL, NULL, "delete_dup_btn", NULL, NULL}, {cancel_xpm , NULL, NULL, "cancel", NULL, NULL}, {trash_btn_xpm , NULL, NULL, "trash_btn", NULL, NULL}, {claws_mail_compose_logo_xpm , NULL, NULL, "claws_mail_compose_logo", NULL, NULL}, diff --git a/src/stock_pixmap.h b/src/stock_pixmap.h @@ -164,6 +164,7 @@ typedef enum STOCK_PIXMAP_CLAWS_MAIL_ICON_64, STOCK_PIXMAP_READ, STOCK_PIXMAP_DELETE, + STOCK_PIXMAP_DELETE_DUP, STOCK_PIXMAP_CANCEL, STOCK_PIXMAP_TRASH, STOCK_PIXMAP_MAIL_COMPOSE_LOGO, diff --git a/src/toolbar.c b/src/toolbar.c @@ -103,13 +103,20 @@ static void activate_compose_button (Toolbar *toolbar, /* toolbar callbacks */ static void toolbar_reply (gpointer data, guint action); + static void toolbar_learn (gpointer data, guint action); -static void toolbar_delete_cb (GtkWidget *widget, - gpointer data); + static void toolbar_trash_cb (GtkWidget *widget, gpointer data); +static void toolbar_delete_cb (GtkWidget *widget, + gpointer data); + +static void toolbar_delete_dup_cb (GtkWidget *widget, + + gpointer data); + static void toolbar_compose_cb (GtkWidget *widget, gpointer data); @@ -229,6 +236,7 @@ struct { { "A_FORWARD", N_("Forward Message") }, { "A_TRASH", N_("Trash Message") }, { "A_DELETE_REAL", N_("Delete Message") }, + { "A_DELETE_DUP", N_("Delete duplicate messages in current folder") }, { "A_EXECUTE", N_("Execute") }, { "A_GOTO_PREV", N_("Go to Previous Unread Message") }, { "A_GOTO_NEXT", N_("Go to Next Unread Message") }, @@ -367,11 +375,11 @@ GList *toolbar_get_action_items(ToolbarType source) A_RECEIVE_ALL, A_RECEIVE_CUR, A_SEND_QUEUED, A_COMPOSE_EMAIL, A_REPLY_MESSAGE, A_REPLY_SENDER, A_REPLY_ALL, A_REPLY_ML, A_OPEN_MAIL, A_FORWARD, - A_TRASH, A_DELETE_REAL, A_EXECUTE, A_GOTO_PREV, - A_GOTO_NEXT, A_IGNORE_THREAD, A_WATCH_THREAD, A_MARK, - A_UNMARK, A_LOCK, A_UNLOCK, A_ALL_READ, - A_ALL_UNREAD, A_READ, A_UNREAD, A_PRINT, - A_ADDRBOOK, A_LEARN_SPAM, A_GO_FOLDERS, + A_TRASH, A_DELETE_REAL, A_DELETE_DUP, A_EXECUTE, + A_GOTO_PREV, A_GOTO_NEXT, A_IGNORE_THREAD, A_WATCH_THREAD, + A_MARK, A_UNMARK, A_LOCK, A_UNLOCK, + A_ALL_READ, A_ALL_UNREAD, A_READ, A_UNREAD, + A_PRINT, A_ADDRBOOK, A_LEARN_SPAM, 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++) { @@ -480,6 +488,7 @@ const gchar *toolbar_get_short_text(int action) { case A_FORWARD: return _("Forward"); case A_TRASH: return C_("Toolbar", "Trash"); case A_DELETE_REAL: return _("Delete"); + case A_DELETE_DUP: return _("Delete duplicates"); case A_EXECUTE: return _("Execute"); case A_GOTO_PREV: return _("Prev"); case A_GOTO_NEXT: return _("Next"); @@ -538,6 +547,7 @@ gint toolbar_get_icon(int action) { case A_FORWARD: return STOCK_PIXMAP_MAIL_FORWARD; case A_TRASH: return STOCK_PIXMAP_TRASH; case A_DELETE_REAL: return STOCK_PIXMAP_DELETE; + case A_DELETE_DUP: return STOCK_PIXMAP_DELETE_DUP; case A_EXECUTE: return STOCK_PIXMAP_EXEC; case A_GOTO_PREV: return STOCK_PIXMAP_UP_ARROW; case A_GOTO_NEXT: return STOCK_PIXMAP_DOWN_ARROW; @@ -1194,6 +1204,25 @@ static void toolbar_delete_cb(GtkWidget *widget, gpointer data) } } +static void toolbar_delete_dup_cb(GtkWidget *widget, gpointer data) +{ + ToolbarItem *toolbar_item = (ToolbarItem*)data; + MainWindow *mainwin = NULL; + + cm_return_if_fail(toolbar_item != NULL); + + switch (toolbar_item->type) { + case TOOLBAR_MAIN: + mainwin = (MainWindow*)toolbar_item->parent; + mainwindow_delete_duplicated(mainwin); + break; + case TOOLBAR_COMPOSE: + case TOOLBAR_MSGVIEW: + break; + default: + return; + } +} /* * Compose new message @@ -1955,6 +1984,7 @@ static void toolbar_buttons_cb(GtkWidget *widget, { A_UNREAD, toolbar_unread_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 }, { A_SEND, toolbar_send_cb }, @@ -2149,7 +2179,7 @@ Toolbar *toolbar_create(ToolbarType type, toolbar_data->getall_btn = item; break; case A_RECEIVE_CUR: - TOOLBAR_ITEM(item,icon_wid,toolbar_item->text, _("Receive Mail from current Account")); + TOOLBAR_ITEM(item,icon_wid,toolbar_item->text,_("Receive Mail from current Account")); toolbar_data->get_btn = item; break; case A_SEND_QUEUED: @@ -2207,6 +2237,10 @@ Toolbar *toolbar_create(ToolbarType type, 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_ITEM(item,icon_wid,toolbar_item->text,_("Delete duplicates")); + toolbar_data->delete_dup_btn = item; + break; case A_REPLY_MESSAGE: #ifndef GENERIC_UMPC TOOLBAR_MENUITEM(item,icon_wid,toolbar_item->text, @@ -2589,7 +2623,7 @@ do { \ } else { SET_WIDGET_COND(toolbar->next_btn, -1); } - + if (toolbar->trash_btn) SET_WIDGET_COND(toolbar->trash_btn, M_TARGET_EXIST, M_ALLOW_DELETE, M_NOT_NEWS); @@ -2598,6 +2632,10 @@ do { \ SET_WIDGET_COND(toolbar->delete_btn, M_TARGET_EXIST, M_ALLOW_DELETE); + if (toolbar->delete_dup_btn) + SET_WIDGET_COND(toolbar->delete_dup_btn, + M_ALLOW_DELETE, M_SUMMARY_ISLIST); + if (toolbar->exec_btn) SET_WIDGET_COND(toolbar->exec_btn, M_DELAY_EXEC); @@ -2727,6 +2765,7 @@ static void toolbar_init(Toolbar * toolbar) toolbar->fwd_btn = NULL; toolbar->trash_btn = NULL; toolbar->delete_btn = NULL; + toolbar->delete_dup_btn = NULL; toolbar->prev_btn = NULL; toolbar->next_btn = NULL; toolbar->exec_btn = NULL; diff --git a/src/toolbar.h b/src/toolbar.h @@ -69,6 +69,7 @@ struct _Toolbar { GtkWidget *trash_btn; GtkWidget *delete_btn; + GtkWidget *delete_dup_btn; GtkWidget *prev_btn; GtkWidget *next_btn; GtkWidget *exec_btn; @@ -168,6 +169,7 @@ enum { A_FORWARD, A_TRASH, A_DELETE_REAL, + A_DELETE_DUP, A_EXECUTE, A_GOTO_PREV, A_GOTO_NEXT,