2013-02-11 [paul] 3.9.0cvs61
[claws.git] / src / mainwindow.c
index 69c858dbb7eb14230b3b858129ced12155a5dd95..6bd5625fac86c83111639d7f9b985f9a8347b028 100644 (file)
@@ -1,6 +1,6 @@
 /*
    Claws Mail -- a GTK+ based, lightweight, and fast e-mail client
-   Copyright (C) 1999-2012 Hiroyuki Yamamoto and the Claws Mail team
+   Copyright (C) 1999-2013 Hiroyuki Yamamoto and the Claws Mail team
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -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, "---" },
 
@@ -1132,7 +1135,7 @@ void mainwin_accel_changed_cb (GtkAccelGroup *accelgroup, guint keyval, GdkModif
                        GtkLabel *label = g_object_get_data(G_OBJECT(item), "accel_label");
                        gchar *new_accel;
                        
-                       if (keyval == GDK_KEY_BackSpace) {
+                       if (keyval == GDK_KEY_Delete) {
                                const gchar *accel_path;
                                accel_path = gtk_menu_item_get_accel_path(item);
                                keyval = 0; modifier = 0;
@@ -1179,8 +1182,11 @@ static void mainwindow_colorlabel_menu_create(MainWindow *mainwin, gboolean refr
        accel_path = g_strdup_printf("<ClawsColorLabels>/None");
        gtk_menu_item_set_accel_path(GTK_MENU_ITEM(item), accel_path);
        g_free(accel_path);
+#if !GTK_CHECK_VERSION(2, 24, 0)
+       gtk_accel_map_add_entry("<ClawsColorLabels>/None", GDK_0, GDK_CONTROL_MASK);
+#else
        gtk_accel_map_add_entry("<ClawsColorLabels>/None", GDK_KEY_0, GDK_CONTROL_MASK);
-
+#endif
        item = gtk_menu_item_new();
        gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
        gtk_widget_show(item);
@@ -1198,9 +1204,13 @@ static void mainwindow_colorlabel_menu_create(MainWindow *mainwin, gboolean refr
                gtk_widget_show(item);
                accel_path = g_strdup_printf("<ClawsColorLabels>/%d", i+1);
                gtk_menu_item_set_accel_path(GTK_MENU_ITEM(item), accel_path);
+               g_free(accel_path);
                if (i < 9)
+#if !GTK_CHECK_VERSION(2, 24, 0)
+                       gtk_accel_map_add_entry(accel_path, GDK_1+i, GDK_CONTROL_MASK);
+#else
                        gtk_accel_map_add_entry(accel_path, GDK_KEY_1+i, GDK_CONTROL_MASK);
-               g_free(accel_path);
+#endif
                g_signal_connect (gtk_ui_manager_get_accel_group(mainwin->ui_manager), 
                        "accel-changed", G_CALLBACK (mainwin_accel_changed_cb), item);
 
@@ -1304,8 +1314,11 @@ static void mainwindow_tags_menu_create(MainWindow *mainwin, gboolean refresh)
        accel_path = g_strdup_printf("<ClawsTags>/ApplyTags");
        gtk_menu_item_set_accel_path(GTK_MENU_ITEM(item), accel_path);
        g_free(accel_path);
+#if !GTK_CHECK_VERSION(2, 24, 0)
+       gtk_accel_map_add_entry("<ClawsTags>/ApplyTags", GDK_T, GDK_CONTROL_MASK|GDK_SHIFT_MASK);
+#else
        gtk_accel_map_add_entry("<ClawsTags>/ApplyTags", GDK_KEY_T, GDK_CONTROL_MASK|GDK_SHIFT_MASK);
-
+#endif
        g_slist_free(orig);
        gtk_widget_show(menu);
        gtk_menu_item_set_submenu(GTK_MENU_ITEM(label_menuitem), menu);
@@ -1792,11 +1805,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 +1902,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)
@@ -3113,9 +3127,9 @@ static void main_window_add_mailbox(MainWindow *mainwin)
        folder_set_ui_func(folder, NULL, NULL);
 }
 
-SensitiveCond main_window_get_current_state(MainWindow *mainwin)
+SensitiveCondMask main_window_get_current_state(MainWindow *mainwin)
 {
-       SensitiveCond state = 0;
+       SensitiveCondMask state = 0;
        SummarySelection selection;
        FolderItem *item = mainwin->summaryview->folder_item;
        GList *account_list = account_get_list();
@@ -3200,14 +3214,14 @@ SensitiveCond main_window_get_current_state(MainWindow *mainwin)
        if (g_list_length(account_list) > 1)
                UPDATE_STATE(M_HAVE_MULTI_ACCOUNT);
 
-       for ( ; account_list != NULL; account_list = account_list->next) {
+       for (account_list = account_get_list(); account_list != NULL; account_list = account_list->next) {
                if (((PrefsAccount*)account_list->data)->protocol != A_NONE) {
                        UPDATE_STATE(M_HAVE_ANY_RETRIEVABLE_ACCOUNT);
                        break;
                }
        }
 
-       for ( ; account_list != NULL; account_list = account_list->next) {
+       for (account_list = account_get_list(); account_list != NULL; account_list = account_list->next) {
                if (((PrefsAccount*)account_list->data)->protocol == A_NNTP) {
                        UPDATE_STATE(M_HAVE_NEWS_ACCOUNT);
                        break;
@@ -3230,6 +3244,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);
 
@@ -3282,7 +3299,7 @@ SensitiveCondMask main_window_get_mask(SensitiveCond cond, ...)
 
 void main_window_set_menu_sensitive(MainWindow *mainwin)
 {
-       SensitiveCond state;
+       SensitiveCondMask state;
        gboolean sensitive;
        SummaryView *summaryview;
        gchar *menu_path;
@@ -3291,10 +3308,10 @@ 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;
+               SensitiveCondMask cond;
        } entry[N_ENTRIES];
 
        i = 0;
@@ -3342,6 +3359,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);
@@ -3349,7 +3367,7 @@ do { \
        FILL_TABLE("Menu/Message/FollowupReply", M_HAVE_ACCOUNT, M_TARGET_EXIST, M_NEWS, M_SUMMARY_ISLIST);
        FILL_TABLE("Menu/Message/Forward", M_HAVE_ACCOUNT, M_TARGET_EXIST, M_SUMMARY_ISLIST);
        FILL_TABLE("Menu/Message/ForwardAtt", M_HAVE_ACCOUNT, M_TARGET_EXIST, M_SUMMARY_ISLIST);
-    FILL_TABLE("Menu/Message/Redirect", M_HAVE_ACCOUNT, M_TARGET_EXIST, M_SUMMARY_ISLIST);
+       FILL_TABLE("Menu/Message/Redirect", M_HAVE_ACCOUNT, M_TARGET_EXIST, M_SUMMARY_ISLIST);
        FILL_TABLE("Menu/Message/Move", M_TARGET_EXIST, M_ALLOW_DELETE, M_NOT_NEWS);
        FILL_TABLE("Menu/Message/Copy", M_TARGET_EXIST, M_EXEC);
        FILL_TABLE("Menu/Message/Trash", M_TARGET_EXIST, M_ALLOW_DELETE, M_NOT_NEWS, M_NOT_TRASH);
@@ -3388,7 +3406,7 @@ do { \
        FILL_TABLE("Menu/Configuration/AccountPrefs", M_UNLOCKED);
        FILL_TABLE("Menu/Configuration/CreateAccount", M_UNLOCKED);
        FILL_TABLE("Menu/Configuration/EditAccounts", M_UNLOCKED);
-       FILL_TABLE(NULL, 0);
+       FILL_TABLE(NULL, -1);
 #undef FILL_TABLE
        if (i > N_ENTRIES)
                g_error("main window menu entry table overrun (%d/%d)", i, N_ENTRIES);
@@ -4459,6 +4477,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;