fix a bug after "check for new messages"; remove unnecessary check
[claws.git] / src / mainwindow.c
index 6c9ff3799be80f5efad76eb3c0fb1006dcd18803..076640f4350d5a8e770500d5e1a510d73f311173 100644 (file)
@@ -238,6 +238,9 @@ static void toolbar_reply_cb                (GtkWidget      *widget,
 static void toolbar_reply_to_all_cb    (GtkWidget      *widget,
                                         gpointer        data);
 
+static void toolbar_reply_to_list_cb   (GtkWidget      *widget,
+                                        gpointer        data);
+
 static void toolbar_reply_to_sender_cb (GtkWidget      *widget,
                                         gpointer        data);
 
@@ -268,6 +271,14 @@ static void toolbar_reply_to_all_popup_closed_cb
                                        (GtkMenuShell   *menu_shell,
                                         gpointer        data);
 
+static void toolbar_reply_to_list_popup_cb       (GtkWidget    *widget,
+                                               GdkEventButton  *event,
+                                               gpointer         data);
+
+static void toolbar_reply_to_list_popup_closed_cb
+                                       (GtkMenuShell   *menu_shell,
+                                        gpointer        data);
+
 static void toolbar_reply_to_sender_popup_cb(GtkWidget *widget,
                                         GdkEventButton *event,
                                         gpointer        data);
@@ -444,9 +455,6 @@ static void create_filter_cb         (MainWindow    *mainwin,
 static void prefs_common_open_cb       (MainWindow     *mainwin,
                                         guint           action,
                                         GtkWidget      *widget);
-static void prefs_filter_open_cb       (MainWindow     *mainwin,
-                                        guint           action,
-                                        GtkWidget      *widget);
 static void prefs_template_open_cb     (MainWindow     *mainwin,
                                         guint           action,
                                         GtkWidget      *widget);
@@ -580,7 +588,7 @@ static GtkItemFactoryEntry mainwin_entries[] =
        {N_("/_View/E_xpand all threads"),      NULL, expand_threads_cb, 0, NULL},
        {N_("/_View/Co_llapse all threads"),    NULL, collapse_threads_cb, 0, NULL},
        {N_("/_View/_Hide read messages"),      NULL, hide_read_messages, 0, "<ToggleItem>"},
-       {N_("/_View/Set display _item..."),     NULL, set_display_item_cb, 0, NULL},
+       {N_("/_View/Set displayed _items..."),  NULL, set_display_item_cb, 0, NULL},
 
        {N_("/_View/---"),                      NULL, NULL, 0, "<Separator>"},
        {N_("/_View/_Go to"),                   NULL, NULL, 0, "<Branch>"},
@@ -691,7 +699,7 @@ static GtkItemFactoryEntry mainwin_entries[] =
        {N_("/_View/---"),                      NULL, NULL, 0, "<Separator>"},
        {N_("/_View/Open in new _window"),      "<control><alt>N", open_msg_cb, 0, NULL},
        {N_("/_View/Mess_age source"),          "<control>U", view_source_cb, 0, NULL},
-       {N_("/_View/Show all _header"),         "<control>H", show_all_header_cb, 0, "<ToggleItem>"},
+       {N_("/_View/Show all _headers"),        "<control>H", show_all_header_cb, 0, "<ToggleItem>"},
        {N_("/_View/---"),                      NULL, NULL, 0, "<Separator>"},
        {N_("/_View/_Update summary"),          "<control><alt>U", update_summary_cb,  0, NULL},
 
@@ -767,11 +775,11 @@ static GtkItemFactoryEntry mainwin_entries[] =
        {N_("/_Configuration"),                 NULL, NULL, 0, "<Branch>"},
        {N_("/_Configuration/_Common preferences..."),
                                                NULL, prefs_common_open_cb, 0, NULL},
-       {N_("/_Configuration/C_ustom toolbar"),
+       {N_("/_Configuration/C_ustomize toolbar"),
                                                NULL, NULL, 0, "<Branch>"},
-       {N_("/_Configuration/C_ustom toolbar/_Main toolbar..."),
+       {N_("/_Configuration/C_ustomize toolbar/_Main toolbar..."),
                                                NULL, prefs_toolbar_cb, TOOLBAR_MAIN, NULL},
-       {N_("/_Configuration/C_ustom toolbar/_Compose toolbar..."),
+       {N_("/_Configuration/C_ustomize toolbar/_Compose toolbar..."),
                                                NULL, prefs_toolbar_cb, TOOLBAR_COMPOSE, NULL},
 #if 0
        {N_("/_Configuration/_Filter setting..."),
@@ -822,6 +830,11 @@ static GtkItemFactoryEntry replyall_popup_entries[] =
        {N_("/Reply to all with _quote"), "<shift>A", reply_cb, COMPOSE_REPLY_TO_ALL_WITH_QUOTE, NULL},
        {N_("/_Reply to all without quote"), "a", reply_cb, COMPOSE_REPLY_TO_ALL_WITHOUT_QUOTE, NULL}
 };
+static GtkItemFactoryEntry replylist_popup_entries[] =
+{
+       {N_("/Reply to list with _quote"), NULL, reply_cb, COMPOSE_REPLY_TO_LIST_WITH_QUOTE, NULL},
+       {N_("/_Reply to list without quote"), NULL, reply_cb, COMPOSE_REPLY_TO_LIST_WITHOUT_QUOTE, NULL}
+};
 static GtkItemFactoryEntry replysender_popup_entries[] =
 {
        {N_("/Reply to sender with _quote"), NULL, reply_cb, COMPOSE_REPLY_TO_SENDER_WITH_QUOTE, NULL},
@@ -847,8 +860,8 @@ MainWindow *main_window_create(SeparateType type)
        GtkWidget *statuslabel;
        GtkWidget *ac_button;
        GtkWidget *ac_label;
-       GtkWidget *online_status;
-       GtkWidget *offline_status;
+       GtkWidget *online_pixmap;
+       GtkWidget *offline_pixmap;
        GtkWidget *online_switch;
        GtkWidget *offline_switch;
 
@@ -932,15 +945,15 @@ MainWindow *main_window_create(SeparateType type)
        gtk_widget_set_usize(progressbar, 120, 1);
        gtk_box_pack_start(GTK_BOX(hbox_stat), progressbar, FALSE, FALSE, 0);
 
-       online_status = stock_pixmap_widget(hbox_stat, STOCK_PIXMAP_WORK_ONLINE);
-       offline_status = stock_pixmap_widget(hbox_stat, STOCK_PIXMAP_WORK_OFFLINE);
+       online_pixmap = stock_pixmap_widget(hbox_stat, STOCK_PIXMAP_WORK_ONLINE);
+       offline_pixmap = stock_pixmap_widget(hbox_stat, STOCK_PIXMAP_WORK_OFFLINE);
        online_switch = gtk_button_new ();
        offline_switch = gtk_button_new ();
-       gtk_container_add (GTK_CONTAINER(online_switch), online_status);
+       gtk_container_add (GTK_CONTAINER(online_switch), online_pixmap);
        gtk_button_set_relief (GTK_BUTTON(online_switch), GTK_RELIEF_NONE);
        gtk_signal_connect (GTK_OBJECT(online_switch), "clicked", (GtkSignalFunc)online_switch_clicked, mainwin);
        gtk_box_pack_start (GTK_BOX(hbox_stat), online_switch, FALSE, FALSE, 0);
-       gtk_container_add (GTK_CONTAINER(offline_switch), offline_status);
+       gtk_container_add (GTK_CONTAINER(offline_switch), offline_pixmap);
        gtk_button_set_relief (GTK_BUTTON(offline_switch), GTK_RELIEF_NONE);
        gtk_signal_connect (GTK_OBJECT(offline_switch), "clicked", (GtkSignalFunc)online_switch_clicked, mainwin);
        gtk_box_pack_start (GTK_BOX(hbox_stat), offline_switch, FALSE, FALSE, 0);
@@ -992,6 +1005,8 @@ MainWindow *main_window_create(SeparateType type)
        
        mainwin->online_switch     = online_switch;
        mainwin->offline_switch    = offline_switch;
+       mainwin->online_pixmap     = online_pixmap;
+       mainwin->offline_pixmap    = offline_pixmap;
        
        /* set context IDs for status bar */
        mainwin->mainwin_cid = gtk_statusbar_get_context_id
@@ -1180,6 +1195,7 @@ void main_window_reflect_prefs_all_real(gboolean pixmap_theme_changed)
 {
        GList *cur;
        MainWindow *mainwin;
+       GtkWidget *pixmap;
 
        for (cur = mainwin_list; cur != NULL; cur = cur->next) {
                mainwin = (MainWindow *)cur->data;
@@ -1194,6 +1210,19 @@ void main_window_reflect_prefs_all_real(gboolean pixmap_theme_changed)
                        set_toolbar_style(mainwin);
                        folderview_reflect_prefs_pixmap_theme(mainwin->folderview);
                        summary_reflect_prefs_pixmap_theme(mainwin->summaryview);
+
+                       pixmap = stock_pixmap_widget(mainwin->hbox_stat, STOCK_PIXMAP_WORK_ONLINE);
+                       gtk_container_remove(GTK_CONTAINER(mainwin->online_switch), 
+                                            mainwin->online_pixmap);
+                       gtk_container_add (GTK_CONTAINER(mainwin->online_switch), pixmap);
+                       gtk_widget_show(pixmap);
+                       mainwin->online_pixmap = pixmap;
+                       pixmap = stock_pixmap_widget(mainwin->hbox_stat, STOCK_PIXMAP_WORK_OFFLINE);
+                       gtk_container_remove(GTK_CONTAINER(mainwin->offline_switch), 
+                                            mainwin->offline_pixmap);
+                       gtk_container_add (GTK_CONTAINER(mainwin->offline_switch), pixmap);
+                       gtk_widget_show(pixmap);
+                       mainwin->offline_pixmap = pixmap;
                }
                
                summary_redisplay_msg(mainwin->summaryview);
@@ -1529,11 +1558,11 @@ void main_window_add_mbox(MainWindow *mainwin)
        item->folder = folder;
        folder->node = g_node_new(item);
 
-       folder->create_folder(folder, item, "inbox");
-       folder->create_folder(folder, item, "outbox");
-       folder->create_folder(folder, item, "queue");
-       folder->create_folder(folder, item, "draft");
-       folder->create_folder(folder, item, "trash");
+       folder_create_folder(item, "inbox");
+       folder_create_folder(item, "outbox");
+       folder_create_folder(item, "queue");
+       folder_create_folder(item, "draft");
+       folder_create_folder(item, "trash");
 
        folderview_set(mainwin->folderview);
 }
@@ -1647,7 +1676,7 @@ void main_window_set_menu_sensitive(MainWindow *mainwin)
                {"/View/Go to/Prev labeled message", M_MSG_EXIST},
                {"/View/Go to/Next labeled message", M_MSG_EXIST},
                {"/View/Open in new window"        , M_SINGLE_TARGET_EXIST},
-               {"/View/Show all header          , M_SINGLE_TARGET_EXIST},
+               {"/View/Show all headers"          , M_SINGLE_TARGET_EXIST},
                {"/View/Message source"            , M_SINGLE_TARGET_EXIST},
 
                {"/Message/Get new mail"          , M_HAVE_ACCOUNT|M_UNLOCKED},
@@ -1744,7 +1773,7 @@ void main_window_set_menu_sensitive(MainWindow *mainwin)
                menu_set_sensitive(ifactory, "/View/Sort/Descending", FALSE);
        }
 
-       SET_CHECK_MENU_ACTIVE("/View/Show all header",
+       SET_CHECK_MENU_ACTIVE("/View/Show all headers",
                              mainwin->messageview->textview->show_all_headers);
        SET_CHECK_MENU_ACTIVE("/View/Thread view", (state & M_THREADED) != 0);
 
@@ -2299,10 +2328,16 @@ static void toolbar_reply_cb(GtkWidget   *widget,
 {
        MainWindow *mainwin = (MainWindow *)data;
 
-       reply_cb(mainwin, 
-                prefs_common.reply_with_quote ? COMPOSE_REPLY_WITH_QUOTE 
-                : COMPOSE_REPLY_WITHOUT_QUOTE,
-                NULL);
+       if (prefs_common.default_reply_list)
+               reply_cb(mainwin, 
+                        prefs_common.reply_with_quote ? COMPOSE_REPLY_TO_LIST_WITH_QUOTE 
+                        : COMPOSE_REPLY_TO_LIST_WITHOUT_QUOTE, 
+                        NULL);
+       else
+               reply_cb(mainwin, 
+                        prefs_common.reply_with_quote ? COMPOSE_REPLY_WITH_QUOTE 
+                        : COMPOSE_REPLY_WITHOUT_QUOTE,
+                        NULL);
 }
 
 static void toolbar_reply_to_all_cb(GtkWidget   *widget, 
@@ -2316,6 +2351,16 @@ static void toolbar_reply_to_all_cb(GtkWidget   *widget,
                 NULL);
 }
 
+static void toolbar_reply_to_list_cb(GtkWidget   *widget, 
+                                   gpointer     data)
+{
+       MainWindow *mainwin = (MainWindow *)data;
+
+       reply_cb(mainwin, 
+                prefs_common.reply_with_quote ? COMPOSE_REPLY_TO_LIST_WITH_QUOTE 
+                : COMPOSE_REPLY_TO_LIST_WITHOUT_QUOTE, 
+                NULL);
+}
 
 static void toolbar_reply_to_sender_cb(GtkWidget   *widget, 
                                       gpointer     data)
@@ -2410,6 +2455,28 @@ static void toolbar_reply_to_all_popup_closed_cb(GtkMenuShell *menu_shell, gpoin
        manage_window_focus_in(mainwin->window, NULL, NULL);
 }
 
+static void toolbar_reply_to_list_popup_cb(GtkWidget *widget, GdkEventButton *event, gpointer data)
+{
+       MainWindow *mainwindow = (MainWindow *) data;
+       
+       if (!event) return;
+
+       if (event->button == 3) {
+               gtk_button_set_relief(GTK_BUTTON(widget), GTK_RELIEF_NORMAL);
+               gtk_menu_popup(GTK_MENU(mainwindow->toolbar->replylist_popup), NULL, NULL,
+                      menu_button_position, widget,
+                      event->button, event->time);
+       }
+}
+
+static void toolbar_reply_to_list_popup_closed_cb(GtkMenuShell *menu_shell, gpointer data)
+{
+       MainWindow *mainwin = (MainWindow *)data;
+
+       gtk_button_set_relief(GTK_BUTTON(mainwin->toolbar->replylist_btn), GTK_RELIEF_NONE);
+       manage_window_focus_in(mainwin->window, NULL, NULL);
+}
+
 static void toolbar_reply_to_sender_popup_cb(GtkWidget *widget, GdkEventButton *event, gpointer data)
 {
        MainWindow *mainwindow = (MainWindow *) data;
@@ -2492,6 +2559,7 @@ static void toolbar_buttons_cb(GtkWidget         *widget,
                { A_REPLY_MESSAGE,  toolbar_reply_cb           },
                { A_REPLY_SENDER,   toolbar_reply_to_sender_cb },
                { A_REPLY_ALL,      toolbar_reply_to_all_cb    },
+               { A_REPLY_ML,       toolbar_reply_to_list_cb   },
                { A_FORWARD,        toolbar_forward_cb         },
                { A_DELETE,         toolbar_delete_cb          },
                { A_EXECUTE,        toolbar_exec_cb            },
@@ -2552,6 +2620,8 @@ void toolbar_set_sensitive(MainWindow *mainwin)
                        M_HAVE_ACCOUNT|M_SINGLE_TARGET_EXIST);
        SET_WIDGET_COND(toolbar->replyall_btn,
                        M_HAVE_ACCOUNT|M_SINGLE_TARGET_EXIST);
+       SET_WIDGET_COND(toolbar->replylist_btn,
+                       M_HAVE_ACCOUNT|M_SINGLE_TARGET_EXIST);
        SET_WIDGET_COND(toolbar->replysender_btn,
                        M_HAVE_ACCOUNT|M_SINGLE_TARGET_EXIST);
        SET_WIDGET_COND(toolbar->fwd_btn, M_HAVE_ACCOUNT|M_TARGET_EXIST);
@@ -2608,6 +2678,7 @@ static void toolbar_update(MainWindow *mainwin)
        mainwin->toolbar->compose_news_btn = NULL;
        mainwin->toolbar->reply_btn        = NULL;      
        mainwin->toolbar->replyall_btn     = NULL;      
+       mainwin->toolbar->replylist_btn     = NULL;     
        mainwin->toolbar->replysender_btn  = NULL;      
        mainwin->toolbar->fwd_btn    = NULL;    
        mainwin->toolbar->delete_btn = NULL;    
@@ -2639,6 +2710,7 @@ static void toolbar_create(MainWindow *mainwin,
        guint n_menu_entries;
        GtkWidget *reply_popup;
        GtkWidget *replyall_popup;
+       GtkWidget *replylist_popup;
        GtkWidget *replysender_popup;
        GtkWidget *fwd_popup;
 
@@ -2779,6 +2851,24 @@ static void toolbar_create(MainWindow *mainwin,
                                           GTK_SIGNAL_FUNC(toolbar_reply_to_all_popup_closed_cb), mainwin);
                        mainwin->toolbar->replyall_popup    = replyall_popup;
                        break;
+               case A_REPLY_ML:
+                       mainwin->toolbar->replylist_btn = item;
+                       gtk_tooltips_set_tip(GTK_TOOLTIPS(toolbar_tips), 
+                                            mainwin->toolbar->replylist_btn,
+                                          _("Reply to Mailing-list"), NULL);
+                       gtk_signal_connect(GTK_OBJECT(mainwin->toolbar->replylist_btn), 
+                                          "button_press_event",
+                                          GTK_SIGNAL_FUNC(toolbar_reply_to_list_popup_cb),
+                                          mainwin);
+                       n_menu_entries = sizeof(replylist_popup_entries) /
+                               sizeof(replylist_popup_entries[0]);
+                       replylist_popup = popupmenu_create(mainwin->window, 
+                                                         replylist_popup_entries, n_menu_entries,
+                                                         "<ReplyMlPopup>", mainwin);
+                       gtk_signal_connect(GTK_OBJECT(replylist_popup), "selection_done",
+                                          GTK_SIGNAL_FUNC(toolbar_reply_to_list_popup_closed_cb), mainwin);
+                       mainwin->toolbar->replylist_popup    = replylist_popup;
+                       break;
                case A_FORWARD:
                        mainwin->toolbar->fwd_btn = item;
                        gtk_tooltips_set_tip(GTK_TOOLTIPS(toolbar_tips), 
@@ -3374,12 +3464,6 @@ static void prefs_common_open_cb(MainWindow *mainwin, guint action,
        prefs_common_open();
 }
 
-static void prefs_filter_open_cb(MainWindow *mainwin, guint action,
-                                GtkWidget *widget)
-{
-       prefs_filter_open(NULL, NULL);
-}
-
 static void prefs_scoring_open_cb(MainWindow *mainwin, guint action,
                                  GtkWidget *widget)
 {
@@ -3479,6 +3563,13 @@ static void key_pressed (GtkWidget *widget, GdkEventKey *event,  gpointer data)
 
                app_exit_cb(mainwin, 0, NULL);
                return;
+       case GDK_space:
+               if (mainwin->folderview && mainwin->summaryview ) {
+                       summary_lock(mainwin->summaryview);
+                       folderview_select_next_unread(mainwin->folderview);
+                       summary_unlock(mainwin->summaryview);
+               }
+               break;
        default:
                break;
        }