Included address harvester feature.
[claws.git] / src / mainwindow.c
index 954707353a1592000abf2ae461b587470555697f..2fcaddb32c7a46de6a15f89a484ab92c90c7e2f7 100644 (file)
@@ -81,6 +81,7 @@
 #include "about.h"
 #include "manual.h"
 #include "version.h"
+#include "selective_download.h"
 
 #define AC_LABEL_WIDTH 240
 
@@ -251,6 +252,9 @@ static void addressbook_open_cb     (MainWindow     *mainwin,
 static void log_window_show_cb (MainWindow     *mainwin,
                                 guint           action,
                                 GtkWidget      *widget);
+static void sel_download_cb     (MainWindow *mainwin, 
+                                guint action,
+                                GtkWidget *widget);
 
 static void inc_mail_cb                        (MainWindow     *mainwin,
                                         guint           action,
@@ -258,6 +262,9 @@ static void inc_mail_cb                     (MainWindow     *mainwin,
 static void inc_all_account_mail_cb    (MainWindow     *mainwin,
                                         guint           action,
                                         GtkWidget      *widget);
+static void inc_cancel_cb              (MainWindow     *mainwin,
+                                        guint           action,
+                                        GtkWidget      *widget);
 
 static void send_queue_cb              (MainWindow     *mainwin,
                                         guint           action,
@@ -390,7 +397,9 @@ static void copy_cb          (MainWindow    *mainwin,
 static void allsel_cb           (MainWindow    *mainwin,
                                  guint          action,
                                  GtkWidget     *widget);
-
+static void selthread_cb        (MainWindow    *mainwin,
+                                 guint          action,
+                                 GtkWidget     *widget);
 static void create_filter_cb    (MainWindow    *mainwin,
                                  guint          action,
                                  GtkWidget     *widget);
@@ -426,6 +435,9 @@ static void account_menu_cb  (GtkMenuItem   *menuitem,
 static void manual_open_cb      (MainWindow    *mainwin,
                                  guint          action,
                                  GtkWidget     *widget);
+static void faq_open_cb                 (MainWindow    *mainwin,
+                                 guint          action,
+                                 GtkWidget     *widget);
 
 static void scan_tree_func      (Folder        *folder,
                                  FolderItem    *item,
@@ -445,6 +457,10 @@ static void key_pressed (GtkWidget *widget,
 
 static void set_toolbar_style(MainWindow *mainwin);
 
+static void addr_gather_cb      ( MainWindow  *mainwin,
+                                  guint       action,
+                                  GtkWidget   *widget );
+
 #define  SEPARATE_ACTION  667
 
 static GtkItemFactoryEntry mainwin_entries[] =
@@ -461,6 +477,7 @@ static GtkItemFactoryEntry mainwin_entries[] =
        {N_("/_File/_Import mbox file..."),     NULL, import_mbox_cb, 0, NULL},
        {N_("/_File/_Export to mbox file..."),  NULL, export_mbox_cb, 0, NULL},
        {N_("/_File/Empty _trash"),             "<shift>D", empty_trash_cb, 0, NULL},
+       {N_("/_File/_Gather addresses..."),     NULL, addr_gather_cb, 0, NULL},
        {N_("/_File/---"),                      NULL, NULL, 0, "<Separator>"},
        {N_("/_File/_Save as..."),              "<control>S", save_as_cb, 0, NULL},
        {N_("/_File/_Print..."),                NULL, print_cb, 0, NULL},
@@ -470,6 +487,7 @@ static GtkItemFactoryEntry mainwin_entries[] =
        {N_("/_Edit"),                          NULL, NULL, 0, "<Branch>"},
        {N_("/_Edit/_Copy"),                    "<control>C", copy_cb, 0, NULL},
        {N_("/_Edit/Select _all"),              "<control>A", allsel_cb, 0, NULL},
+       {N_("/_Edit/Select thread"),            "<control>Z", selthread_cb, 0, NULL},
        {N_("/_Edit/---"),                      NULL, NULL, 0, "<Separator>"},
        {N_("/_Edit/_Find in current message..."),
                                                "<control>F", search_cb, 0, NULL},
@@ -478,10 +496,10 @@ static GtkItemFactoryEntry mainwin_entries[] =
        {N_("/_Edit/Actio_ns"),                 NULL, NULL, 0, "<Branch>"},
 
        {N_("/_View"),                          NULL, NULL, 0, "<Branch>"},
-       {N_("/_View/_Folder tree"),             NULL, NULL, SEPARATE_ACTION + SEPARATE_FOLDER,  "<ToggleItem>"},
-       {N_("/_View/_Message view"),            NULL, NULL, SEPARATE_ACTION + SEPARATE_MESSAGE, "<ToggleItem>"},
-       {N_("/_View/E_xpand Summary View"),             "V", toggle_expand_summaryview_cb, 0, "<ToggleItem>"},
-       {N_("/_View/Ex_pand Message View"),             "<shift>V", toggle_expand_messageview_cb, 0, "<ToggleItem>"},
+       {N_("/_View/Separate _Folder Tree"),    NULL, NULL, SEPARATE_ACTION + SEPARATE_FOLDER,  "<ToggleItem>"},
+       {N_("/_View/Separate _Message View"),   NULL, NULL, SEPARATE_ACTION + SEPARATE_MESSAGE, "<ToggleItem>"},
+       {N_("/_View/E_xpand Summary View"),     "V", toggle_expand_summaryview_cb, 0, "<ToggleItem>"},
+       {N_("/_View/Ex_pand Message View"),     "<shift>V", toggle_expand_messageview_cb, 0, "<ToggleItem>"},
        {N_("/_View/_Toolbar"),                 NULL, NULL, 0, "<Branch>"},
        {N_("/_View/_Toolbar/Icon _and text"),  NULL, toggle_toolbar_cb, TOOLBAR_BOTH, "<RadioItem>"},
        {N_("/_View/_Toolbar/_Icon"),           NULL, toggle_toolbar_cb, TOOLBAR_ICON, "/View/Toolbar/Icon and text"},
@@ -528,6 +546,8 @@ static GtkItemFactoryEntry mainwin_entries[] =
 #endif
        {N_("/_View/_Code set/Western European (ISO-8859-_1)"),
         CODESET_ACTION(C_ISO_8859_1)},
+       {N_("/_View/_Code set/Western European (ISO-8859-15)"),
+        CODESET_ACTION(C_ISO_8859_15)},
        CODESET_SEPARATOR,
 #if HAVE_LIBJCONV
        {N_("/_View/_Code set/Central European (ISO-8859-_2)"),
@@ -619,9 +639,9 @@ static GtkItemFactoryEntry mainwin_entries[] =
        {N_("/_Message/Get new ma_il"),         "<control>I",   inc_mail_cb, 0, NULL},
        {N_("/_Message/Get from _all accounts"),
                                                "<shift><control>I", inc_all_account_mail_cb, 0, NULL},
+       {N_("/_Message/Cancel receivin_g"),     NULL, inc_cancel_cb, 0, NULL},
        {N_("/_Message/---"),                   NULL, NULL, 0, "<Separator>"},
-       {N_("/_Message/Send queued messa_ges"),
-                                               NULL, send_queue_cb, 0, NULL},
+       {N_("/_Message/_Send queued messages"), NULL, send_queue_cb, 0, NULL},
        {N_("/_Message/---"),                   NULL, NULL, 0, "<Separator>"},
        {N_("/_Message/Compose a_n email message"),     "<control>M", compose_mail_cb, 0, NULL},
        {N_("/_Message/Compose a news message"),        NULL,   compose_news_cb, 0, NULL},
@@ -669,6 +689,7 @@ static GtkItemFactoryEntry mainwin_entries[] =
        {N_("/_Tool/E_xecute"),                 "X", execute_summary_cb, 0, NULL},
        {N_("/_Tool/---"),                      NULL, NULL, 0, "<Separator>"},
        {N_("/_Tool/_Log window"),              "<control>L", log_window_show_cb, 0, NULL},
+       {N_("/_Tool/_Selective Download"),      "<alt>S", sel_download_cb, 0, NULL},
 
        {N_("/_Configuration"),                 NULL, NULL, 0, "<Branch>"},
        {N_("/_Configuration/_Common preferences..."),
@@ -694,7 +715,13 @@ static GtkItemFactoryEntry mainwin_entries[] =
        {N_("/_Help"),                          NULL, NULL, 0, "<Branch>"},
        {N_("/_Help/_Manual"),                  NULL, NULL, 0, "<Branch>"},
        {N_("/_Help/_Manual/_English"),         NULL, manual_open_cb, MANUAL_LANG_EN, NULL},
+       {N_("/_Help/_Manual/_French"),          NULL, manual_open_cb, MANUAL_LANG_FR, NULL},
        {N_("/_Help/_Manual/_Japanese"),        NULL, manual_open_cb, MANUAL_LANG_JA, NULL},
+       {N_("/_Help/_FAQ"),                     NULL, NULL, 0, "<Branch>"},
+       {N_("/_Help/_FAQ/_English"),            NULL, faq_open_cb, MANUAL_LANG_EN, NULL},
+       {N_("/_Help/_FAQ/_Spanish"),            NULL, faq_open_cb, MANUAL_LANG_ES, NULL},
+       {N_("/_Help/_FAQ/_French"),             NULL, faq_open_cb, MANUAL_LANG_FR, NULL},
+       {N_("/_Help/_FAQ/_Italian"),            NULL, faq_open_cb, MANUAL_LANG_IT, NULL},
        {N_("/_Help/---"),                      NULL, NULL, 0, "<Separator>"},
        {N_("/_Help/_About"),                   NULL, about_show, 0, NULL}
 };
@@ -759,12 +786,10 @@ MainWindow *main_window_create(SeparateType type)
        window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_title(GTK_WINDOW(window), PROG_VERSION);
        gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, FALSE);
+       gtk_window_set_wmclass(GTK_WINDOW(window), "main_window", "Sylpheed");
        gtk_signal_connect(GTK_OBJECT(window), "delete_event",
                           GTK_SIGNAL_FUNC(main_window_close_cb), mainwin);
-       gtk_signal_connect(GTK_OBJECT(window), "focus_in_event",
-                          GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
-       gtk_signal_connect(GTK_OBJECT(window), "focus_out_event",
-                          GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
+       MANAGE_WINDOW_SIGNALS_CONNECT(window);
        gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
                                GTK_SIGNAL_FUNC(key_pressed), mainwin);
 
@@ -904,7 +929,7 @@ MainWindow *main_window_create(SeparateType type)
                                       &folderview->color_op);
 
        summaryview->color_important.red = 0;
-       summaryview->color_marked.green = 0;
+       summaryview->color_important.green = 0;
        summaryview->color_important.blue = (guint16)65535;
 
        color[0] = summaryview->color_marked;
@@ -1398,9 +1423,10 @@ typedef enum
        M_THREADED            = 1 << 7,
        M_UNTHREADED          = 1 << 8,
        M_ALLOW_DELETE        = 1 << 9,
-       M_NEWS                = 1 << 10,
-       M_HAVE_NEWS_ACCOUNT   = 1 << 11,
-       M_HIDE_READ_MSG       = 1 << 12
+       M_INC_ACTIVE          = 1 << 10,
+       M_NEWS                = 1 << 11,
+       M_HAVE_NEWS_ACCOUNT   = 1 << 12,
+       M_HIDE_READ_MSG       = 1 << 13
 } SensitiveCond;
 
 static SensitiveCond main_window_get_current_state(MainWindow *mainwin)
@@ -1422,8 +1448,8 @@ static SensitiveCond main_window_get_current_state(MainWindow *mainwin)
                        state |= M_THREADED;
                else
                        state |= M_UNTHREADED;  
-               if (item->folder->type != F_NEWS)
-                       state |= M_ALLOW_DELETE;
+               /*              if (item->folder->type != F_NEWS) */
+               state |= M_ALLOW_DELETE;
 
                if (selection == SUMMARY_NONE && item->hide_read_msgs
                    || selection != SUMMARY_NONE)
@@ -1452,6 +1478,9 @@ static SensitiveCond main_window_get_current_state(MainWindow *mainwin)
                }
        }
 
+       if (inc_is_active())
+               state |= M_INC_ACTIVE;
+
        return state;
 }
 
@@ -1524,12 +1553,14 @@ void main_window_set_menu_sensitive(MainWindow *mainwin)
                {"/File/Import mbox file..."   , M_UNLOCKED},
                {"/File/Export to mbox file...", M_UNLOCKED},
                {"/File/Empty trash"           , M_UNLOCKED},
+               {"/File/Gather addresses...", M_SINGLE_TARGET_EXIST|M_UNLOCKED},
                {"/File/Save as...", M_SINGLE_TARGET_EXIST|M_UNLOCKED},
                {"/File/Print..."  , M_TARGET_EXIST|M_UNLOCKED},
                /* {"/File/Close", M_UNLOCKED}, */
                {"/File/Exit" , M_UNLOCKED},
 
                {"/Edit/Actions"                   , M_MSG_EXIST},
+               {"/Edit/Select thread"             , M_SINGLE_TARGET_EXIST},
                {"/View/Sort"                      , M_MSG_EXIST},
                {"/View/Thread view"               , M_EXEC},
                {"/View/Hide read messages"        , M_HIDE_READ_MSG},
@@ -1547,6 +1578,7 @@ void main_window_set_menu_sensitive(MainWindow *mainwin)
 
                {"/Message/Get new mail"          , M_HAVE_ACCOUNT|M_UNLOCKED},
                {"/Message/Get from all accounts" , M_HAVE_ACCOUNT|M_UNLOCKED},
+               {"/Message/Cancel receiving"      , M_INC_ACTIVE},
                {"/Message/Compose a news message", M_HAVE_NEWS_ACCOUNT},
                {"/Message/Reply"                 , M_HAVE_ACCOUNT|M_SINGLE_TARGET_EXIST},
                {"/Message/Reply to sender"       , M_HAVE_ACCOUNT|M_SINGLE_TARGET_EXIST},
@@ -2515,15 +2547,26 @@ static void log_window_show_cb(MainWindow *mainwin, guint action,
        log_window_show(mainwin->logwin);
 }
 
+static void sel_download_cb(MainWindow *mainwin, guint action,
+                              GtkWidget *widget)
+{
+       selective_download(mainwin);
+}
+
 static void inc_mail_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
 {
-       inc_mail(mainwin);
+       inc_mail(mainwin, prefs_common.newmail_notify_manu);
 }
 
 static void inc_all_account_mail_cb(MainWindow *mainwin, guint action,
                                    GtkWidget *widget)
 {
-       inc_all_account_mail(mainwin);
+       inc_all_account_mail(mainwin, prefs_common.newmail_notify_manu);
+}
+
+static void inc_cancel_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
+{
+       inc_cancel_all();
 }
 
 static void send_queue_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
@@ -2858,6 +2901,12 @@ static void allsel_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
                messageview_select_all(mainwin->messageview);
 }
 
+static void selthread_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
+{
+       if (mainwin->summaryview->msg_is_toggled_on)
+               summary_select_thread(mainwin->summaryview);
+}
+
 static void create_filter_cb(MainWindow *mainwin, guint action,
                             GtkWidget *widget)
 {
@@ -2936,6 +2985,11 @@ static void manual_open_cb(MainWindow *mainwin, guint action,
        manual_open((ManualLang)action);
 }
 
+static void faq_open_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
+{
+       faq_open((ManualLang)action);
+}
+
 static void scan_tree_func(Folder *folder, FolderItem *item, gpointer data)
 {
        MainWindow *mainwin = (MainWindow *)data;
@@ -3041,3 +3095,14 @@ static void set_toolbar_style(MainWindow *mainwin)
        }
 }
 
+static void addr_gather_cb( MainWindow *mainwin,
+                           guint action,
+                           GtkWidget *widget )
+{
+       addressbook_gather( mainwin->summaryview->folder_item );
+}
+
+/*
+* End of Source.
+*/
+