talons

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

commit 931e462dbf95b1d2a260bc5ad756a8d5847cd489
parent 6581aadd4e219ae3973e13dd93c75bd3e80e8bd8
Author: Tristan Chabredier <wwp@claws-mail.org>
Date:   Fri, 30 Nov 2012 14:25:12 +0000

2012-11-30 [wwp]	3.9.0cvs31

	* src/mainwindow.c
	* src/mainwindow.h
	* src/procmsg.c
	* src/send_message.c
	* src/send_message.h
	* src/toolbar.c
	* src/toolbar.h
	Add Message/Cancel sending (same as --cancel-sending), adds the
	relevant toolbar icon, and an extra cancel sending+receiving icon
	for convenience.

Diffstat:
MChangeLog | 13+++++++++++++
MPATCHSETS | 1+
Mconfigure.ac | 2+-
Msrc/mainwindow.c | 25+++++++++++++++++++------
Msrc/mainwindow.h | 1+
Msrc/procmsg.c | 4++++
Msrc/send_message.c | 7++++++-
Msrc/send_message.h | 1+
Msrc/toolbar.c | 79++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------
Msrc/toolbar.h | 4++++
10 files changed, 110 insertions(+), 27 deletions(-)

diff --git a/ChangeLog b/ChangeLog @@ -1,3 +1,16 @@ +2012-11-30 [wwp] 3.9.0cvs31 + + * src/mainwindow.c + * src/mainwindow.h + * src/procmsg.c + * src/send_message.c + * src/send_message.h + * src/toolbar.c + * src/toolbar.h + Add Message/Cancel sending (same as --cancel-sending), adds the + relevant toolbar icon, and an extra cancel sending+receiving icon + for convenience. + 2012-11-29 [colin] 3.9.0cvs30 * src/mainwindow.c diff --git a/PATCHSETS b/PATCHSETS @@ -4528,3 +4528,4 @@ ( cvs diff -u -r 1.274.2.357 -r 1.274.2.358 src/mainwindow.c; cvs diff -u -r 1.101.2.74 -r 1.101.2.75 src/news.c; cvs diff -u -r 1.21.2.11 -r 1.21.2.12 src/news.h; cvs diff -u -r 1.1.2.23 -r 1.1.2.24 src/etpan/nntp-thread.c; ) > 3.9.0cvs28.patchset ( cvs diff -u -r 1.274.2.358 -r 1.274.2.359 src/mainwindow.c; cvs diff -u -r 1.39.2.65 -r 1.39.2.66 src/mainwindow.h; cvs diff -u -r 1.395.2.458 -r 1.395.2.459 src/summaryview.c; cvs diff -u -r 1.43.2.132 -r 1.43.2.133 src/toolbar.c; ) > 3.9.0cvs29.patchset ( cvs diff -u -r 1.274.2.359 -r 1.274.2.360 src/mainwindow.c; ) > 3.9.0cvs30.patchset +( cvs diff -u -r 1.274.2.360 -r 1.274.2.361 src/mainwindow.c; cvs diff -u -r 1.39.2.66 -r 1.39.2.67 src/mainwindow.h; cvs diff -u -r 1.150.2.132 -r 1.150.2.133 src/procmsg.c; cvs diff -u -r 1.17.2.66 -r 1.17.2.67 src/send_message.c; cvs diff -u -r 1.1.4.13 -r 1.1.4.14 src/send_message.h; cvs diff -u -r 1.43.2.133 -r 1.43.2.134 src/toolbar.c; cvs diff -u -r 1.19.2.35 -r 1.19.2.36 src/toolbar.h; ) > 3.9.0cvs31.patchset diff --git a/configure.ac b/configure.ac @@ -12,7 +12,7 @@ MINOR_VERSION=9 MICRO_VERSION=0 INTERFACE_AGE=0 BINARY_AGE=0 -EXTRA_VERSION=30 +EXTRA_VERSION=31 EXTRA_RELEASE= EXTRA_GTK2_VERSION= diff --git a/src/mainwindow.c b/src/mainwindow.c @@ -187,6 +187,8 @@ static void filtering_debug_window_show_cb (GtkAction *action, static void inc_cancel_cb (GtkAction *action, gpointer data); +static void send_cancel_cb (GtkAction *action, + gpointer data); static void open_msg_cb (GtkAction *action, gpointer data); @@ -642,6 +644,7 @@ static GtkActionEntry mainwin_entries[] = {"Message/Receive/---", NULL, "---" }, {"Message/Receive/PlaceHolder", NULL, "PlaceHolder,", NULL, NULL, G_CALLBACK(mainwindow_nothing_cb) }, {"Message/SendQueue", NULL, N_("_Send queued messages"), NULL, NULL, G_CALLBACK(mw_send_queue_cb) }, + {"Message/CancelSending", NULL, N_("Cancel sending"), NULL, NULL, G_CALLBACK(send_cancel_cb) }, {"Message/---", NULL, "---" }, @@ -1792,11 +1795,11 @@ MainWindow *main_window_create() MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/View/Goto", "Separator8", "View/Goto/---", GTK_UI_MANAGER_SEPARATOR) MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/View/Goto", "NextPart", "View/Goto/NextPart", GTK_UI_MANAGER_MENUITEM) MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/View/Goto", "PrevPart", "View/Goto/PrevPart", GTK_UI_MANAGER_MENUITEM) - MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/View", "Scroll", "View/Scroll", GTK_UI_MANAGER_MENU) - MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/View/Scroll", "PrevLine", "View/Scroll/PrevLine", GTK_UI_MANAGER_MENUITEM) - MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/View/Scroll", "NextLine", "View/Scroll/NextLine", GTK_UI_MANAGER_MENUITEM) - MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/View/Scroll", "PrevPage", "View/Scroll/PrevPage", GTK_UI_MANAGER_MENUITEM) - MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/View/Scroll", "NextPage", "View/Scroll/NextPage", GTK_UI_MANAGER_MENUITEM) + MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/View", "Scroll", "View/Scroll", GTK_UI_MANAGER_MENU) + MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/View/Scroll", "PrevLine", "View/Scroll/PrevLine", GTK_UI_MANAGER_MENUITEM) + MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/View/Scroll", "NextLine", "View/Scroll/NextLine", GTK_UI_MANAGER_MENUITEM) + MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/View/Scroll", "PrevPage", "View/Scroll/PrevPage", GTK_UI_MANAGER_MENUITEM) + MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/View/Scroll", "NextPage", "View/Scroll/NextPage", GTK_UI_MANAGER_MENUITEM) MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/View", "Separator4", "View/---", GTK_UI_MANAGER_SEPARATOR) MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/View", "Encoding", "View/Encoding", GTK_UI_MANAGER_MENU) @@ -1889,6 +1892,7 @@ MainWindow *main_window_create() MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Message/Receive", "Separator1", "Message/Receive/---", GTK_UI_MANAGER_SEPARATOR) MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Message/Receive", "PlaceHolder", "Message/Receive/PlaceHolder", GTK_UI_MANAGER_MENUITEM) MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Message", "SendQueue", "Message/SendQueue", GTK_UI_MANAGER_MENUITEM) + MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Message", "CancelSending", "Message/CancelSending", GTK_UI_MANAGER_MENUITEM) MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Message", "Separator1", "Message/---", GTK_UI_MANAGER_SEPARATOR) MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Message", "ComposeEmail", "Message/ComposeEmail", GTK_UI_MANAGER_MENUITEM) @@ -3230,6 +3234,9 @@ SensitiveCond main_window_get_current_state(MainWindow *mainwin) if (imap_cancel_all_enabled()) UPDATE_STATE(M_INC_ACTIVE); + if (send_is_active() | procmsg_is_sending()) + UPDATE_STATE(M_SEND_ACTIVE); + if (mainwin->summaryview->deleted > 0) UPDATE_STATE(M_DELETED_EXISTS); @@ -3291,7 +3298,7 @@ void main_window_set_menu_sensitive(MainWindow *mainwin) gint i; gboolean mimepart_selected = FALSE; -#define N_ENTRIES 81 +#define N_ENTRIES 82 static struct { const gchar *entry; SensitiveCond cond; @@ -3342,6 +3349,7 @@ do { \ FILL_TABLE("Menu/Message/Receive/AllAccounts", M_HAVE_ACCOUNT, M_UNLOCKED, M_HAVE_ANY_RETRIEVABLE_ACCOUNT); FILL_TABLE("Menu/Message/Receive/CancelReceiving", M_INC_ACTIVE); FILL_TABLE("Menu/Message/SendQueue", M_HAVE_ACCOUNT, M_HAVE_QUEUED_MAILS); + FILL_TABLE("Menu/Message/CancelSending", M_SEND_ACTIVE); FILL_TABLE("Menu/Message/ComposeEmail", M_HAVE_ACCOUNT); FILL_TABLE("Menu/Message/ComposeNews", M_HAVE_NEWS_ACCOUNT); FILL_TABLE("Menu/Message/Reply", M_HAVE_ACCOUNT, M_TARGET_EXIST, M_SUMMARY_ISLIST); @@ -4459,6 +4467,11 @@ static void inc_cancel_cb(GtkAction *action, gpointer data) imap_cancel_all(); } +static void send_cancel_cb(GtkAction *action, gpointer data) +{ + send_cancel(); +} + static void move_to_cb(GtkAction *action, gpointer data) { MainWindow *mainwin = (MainWindow *)data; diff --git a/src/mainwindow.h b/src/mainwindow.h @@ -47,6 +47,7 @@ typedef enum M_UNTHREADED, M_ALLOW_DELETE, M_INC_ACTIVE, + M_SEND_ACTIVE, M_NEWS, M_HAVE_NEWS_ACCOUNT, M_HIDE_READ_MSG, diff --git a/src/procmsg.c b/src/procmsg.c @@ -943,6 +943,7 @@ gint procmsg_send_queue(FolderItem *queue, gboolean save_msgs, gchar **errstr) GNode *node, *next; if (!procmsg_queue_lock(errstr)) { + main_window_set_menu_sensitive(mainwindow_get_mainwindow()); toolbar_main_set_sensitive(mainwindow_get_mainwindow()); return -1; } @@ -956,6 +957,7 @@ gint procmsg_send_queue(FolderItem *queue, gboolean save_msgs, gchar **errstr) return -1; } + main_window_set_menu_sensitive(mainwindow_get_mainwindow()); toolbar_main_set_sensitive(mainwindow_get_mainwindow()); folder_item_scan(queue); @@ -1013,6 +1015,7 @@ gint procmsg_send_queue(FolderItem *queue, gboolean save_msgs, gchar **errstr) } procmsg_queue_unlock(); inc_unlock(); + main_window_set_menu_sensitive(mainwindow_get_mainwindow()); toolbar_main_set_sensitive(mainwindow_get_mainwindow()); return (err != 0 ? -err : sent); @@ -1896,6 +1899,7 @@ send_mail: gint procmsg_send_message_queue(const gchar *file, gchar **errstr, FolderItem *queue, gint msgnum, gboolean *queued_removed) { gint result = procmsg_send_message_queue_full(file, FALSE, errstr, queue, msgnum, queued_removed); + main_window_set_menu_sensitive(mainwindow_get_mainwindow()); toolbar_main_set_sensitive(mainwindow_get_mainwindow()); return result; } diff --git a/src/send_message.c b/src/send_message.c @@ -94,6 +94,11 @@ void send_cancel(void) send_cancel_button_cb(NULL, send_dialog); } +gboolean send_is_active(void) +{ + return (send_dialog != NULL); +} + gint send_message(const gchar *file, PrefsAccount *ac_prefs, GSList *to_list) { FILE *fp; @@ -606,7 +611,7 @@ static void send_progress_dialog_destroy(SendProgressDialog *dialog) progress_dialog_destroy(dialog->dialog); } g_free(dialog); - dialog = NULL; + send_dialog = NULL; } static void send_showlog_button_cb(GtkWidget *widget, gpointer data) diff --git a/src/send_message.h b/src/send_message.h @@ -42,5 +42,6 @@ gint send_message_smtp_full (PrefsAccount *ac_prefs, FILE *fp, gboolean keep_session); void send_cancel (void); +gboolean inc_is_active (void); #endif /* __SEND_H__ */ diff --git a/src/toolbar.c b/src/toolbar.c @@ -179,6 +179,10 @@ static void toolbar_check_spelling_cb (GtkWidget *widget, #endif static void toolbar_cancel_inc_cb (GtkWidget *widget, gpointer data); +static void toolbar_cancel_send_cb (GtkWidget *widget, + gpointer data); +static void toolbar_cancel_all_cb (GtkWidget *widget, + gpointer data); struct { gchar *index_str; @@ -193,19 +197,19 @@ struct { { "A_REPLY_SENDER", N_("Reply to Sender") }, { "A_REPLY_ALL", N_("Reply to All") }, { "A_REPLY_ML", N_("Reply to Mailing-list") }, - { "A_OPEN_MAIL", N_("Open email") }, + { "A_OPEN_MAIL", N_("Open email") }, { "A_FORWARD", N_("Forward Message") }, { "A_TRASH", N_("Trash Message") }, { "A_DELETE_REAL", N_("Delete Message") }, { "A_EXECUTE", N_("Execute") }, { "A_GOTO_PREV", N_("Go to Previous Unread Message") }, { "A_GOTO_NEXT", N_("Go to Next Unread Message") }, - { "A_IGNORE_THREAD", N_("Ignore thread") }, - { "A_WATCH_THREAD", N_("Watch thread") }, - { "A_PRINT", N_("Print") }, - { "A_LEARN_SPAM", N_("Learn Spam or Ham") }, + { "A_IGNORE_THREAD", N_("Ignore thread") }, + { "A_WATCH_THREAD", N_("Watch thread") }, + { "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_PREFERENCES", N_("Preferences") }, { "A_SEND", N_("Send Message") }, { "A_SENDL", N_("Put into queue folder and send later") }, @@ -220,11 +224,13 @@ struct { #ifdef USE_ENCHANT { "A_CHECK_SPELLING", N_("Check spelling") }, #endif - { "A_CLAWS_ACTIONS", N_("Claws Mail Actions Feature") }, - { "A_CANCEL_INC", N_("Cancel receiving") }, - { "A_CLOSE", N_("Close window") }, - { "A_SEPARATOR", N_("Separator") }, - { "A_CLAWS_PLUGINS", N_("Claws Mail Plugins") }, + { "A_CLAWS_ACTIONS", N_("Claws Mail Actions Feature") }, + { "A_CANCEL_INC", N_("Cancel receiving") }, + { "A_CANCEL_SEND", N_("Cancel sending") }, + { "A_CANCEL_ALL", N_("Cancel receiving/sending") }, + { "A_CLOSE", N_("Close window") }, + { "A_SEPARATOR", N_("Separator") }, + { "A_CLAWS_PLUGINS", N_("Claws Mail Plugins") }, }; /* struct holds configuration files and a list of @@ -305,13 +311,13 @@ GList *toolbar_get_action_items(ToolbarType source) gint i = 0; if (source == TOOLBAR_MAIN) { - gint main_items[] = { A_RECEIVE_ALL, A_RECEIVE_CUR, A_SEND_QUEUED, + gint main_items[] = { 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_PRINT, - A_ADDRBOOK, A_LEARN_SPAM, A_GO_FOLDERS, - A_CANCEL_INC, A_PREFERENCES }; + 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_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++) { items = g_list_append(items, gettext(toolbar_text[main_items[i]].descr)); @@ -424,6 +430,8 @@ const gchar *toolbar_get_short_text(int action) { case A_LINEWRAP_ALL: return _("Wrap all"); case A_ADDRBOOK: return _("Address"); case A_CANCEL_INC: return _("Stop"); + case A_CANCEL_SEND: return _("Stop"); + case A_CANCEL_ALL: return _("Stop all"); case A_EXECUTE: return _("Execute"); #ifdef USE_ENCHANT case A_CHECK_SPELLING: return _("Check spelling"); @@ -467,6 +475,8 @@ gint toolbar_get_icon(int action) { case A_LINEWRAP_ALL: return STOCK_PIXMAP_LINEWRAP_ALL; case A_ADDRBOOK: return STOCK_PIXMAP_ADDRESS_BOOK; case A_CANCEL_INC: return STOCK_PIXMAP_CANCEL; + case A_CANCEL_SEND: return STOCK_PIXMAP_CANCEL; + case A_CANCEL_ALL: return STOCK_PIXMAP_CANCEL; case A_EXECUTE: return STOCK_PIXMAP_EXEC; #ifdef USE_ENCHANT case A_CHECK_SPELLING: return STOCK_PIXMAP_CHECK_SPELLING; @@ -1486,6 +1496,19 @@ static void toolbar_cancel_inc_cb(GtkWidget *widget, gpointer data) imap_cancel_all(); } +static void toolbar_cancel_send_cb(GtkWidget *widget, gpointer data) +{ + ToolbarItem *toolbar_item = (ToolbarItem*)data; + + cm_return_if_fail(toolbar_item != NULL); + send_cancel(); +} + +static void toolbar_cancel_all_cb(GtkWidget *widget, gpointer data) +{ + toolbar_cancel_inc_cb(widget, data); + toolbar_cancel_send_cb(widget, data); +} static void toolbar_print_cb(GtkWidget *widget, gpointer data) { @@ -1746,6 +1769,8 @@ static void toolbar_buttons_cb(GtkWidget *widget, #endif { A_CLAWS_ACTIONS, toolbar_actions_execute_cb }, { A_CANCEL_INC, toolbar_cancel_inc_cb }, + { A_CANCEL_SEND, toolbar_cancel_send_cb }, + { A_CANCEL_ALL, toolbar_cancel_all_cb }, { A_CLAWS_PLUGINS, toolbar_plugins_execute_cb }, }; @@ -2152,6 +2177,14 @@ Toolbar *toolbar_create(ToolbarType type, TOOLBAR_ITEM(item,icon_wid,toolbar_item->text,_("Cancel receiving")); toolbar_data->cancel_inc_btn = item; break; + case A_CANCEL_SEND: + TOOLBAR_ITEM(item,icon_wid,toolbar_item->text,_("Cancel sending")); + toolbar_data->cancel_send_btn = item; + break; + case A_CANCEL_ALL: + TOOLBAR_ITEM(item,icon_wid,toolbar_item->text,_("Cancel receiving/sending")); + toolbar_data->cancel_all_btn = item; + break; case A_CLAWS_PLUGINS: TOOLBAR_ITEM(item,icon_wid,toolbar_item->text, toolbar_item->text); break; @@ -2442,6 +2475,10 @@ do { \ SET_WIDGET_COND(toolbar->cancel_inc_btn, M_INC_ACTIVE); + if (toolbar->cancel_send_btn) + SET_WIDGET_COND(toolbar->cancel_send_btn, + M_SEND_ACTIVE); + for (cur = toolbar->action_list; cur != NULL; cur = cur->next) { ToolbarClawsActions *act = (ToolbarClawsActions*)cur->data; @@ -2468,7 +2505,10 @@ do { \ /* match any bit flags */ - /* + if (toolbar->cancel_all_btn) + SET_WIDGET_COND(toolbar->cancel_all_btn, + M_INC_ACTIVE, M_SEND_ACTIVE); + for (cur = entry_list; cur != NULL; cur = cur->next) { Entry *e = (Entry*) cur->data; @@ -2477,7 +2517,6 @@ do { \ GTK_BUTTON_SET_SENSITIVE(e->widget, sensitive); } } - */ while (entry_list != NULL) { Entry *e = (Entry*) entry_list->data; @@ -2559,6 +2598,8 @@ static void toolbar_init(Toolbar * toolbar) 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; /* compose buttons */ toolbar->sendl_btn = NULL; diff --git a/src/toolbar.h b/src/toolbar.h @@ -77,6 +77,8 @@ struct _Toolbar { GtkWidget *learn_ham_icon; GtkWidget *cancel_inc_btn; + GtkWidget *cancel_send_btn; + GtkWidget *cancel_all_btn; ComposeButtonType compose_btn_type; LearnButtonType learn_btn_type; @@ -194,6 +196,8 @@ enum { /* common items */ A_CLAWS_ACTIONS, A_CANCEL_INC, + A_CANCEL_SEND, + A_CANCEL_ALL, A_CLOSE, A_SEPARATOR,