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:
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,