2006-08-16 [colin] 2.4.0cvs54
[claws.git] / src / mainwindow.c
index cc7e413fd90acfe508cd49a0f380dbf978b6cd6c..8c27cc4674ba3337808a98093a5fabadc2fcf7e8 100644 (file)
@@ -218,6 +218,10 @@ static void show_all_header_cb             (MainWindow     *mainwin,
                                         guint           action,
                                         GtkWidget      *widget);
 
+static void hide_quotes_cb(MainWindow  *mainwin,
+                                        guint           action,
+                                        GtkWidget      *widget);
+
 static void move_to_cb                 (MainWindow     *mainwin,
                                         guint           action,
                                         GtkWidget      *widget);
@@ -348,6 +352,12 @@ static void prev_labeled_cb         (MainWindow    *mainwin,
 static void next_labeled_cb     (MainWindow    *mainwin,
                                  guint          action,
                                  GtkWidget     *widget);
+static void last_read_cb        (MainWindow    *mainwin,
+                                 guint          action,
+                                 GtkWidget     *widget);
+static void parent_cb           (MainWindow    *mainwin,
+                                 guint          action,
+                                 GtkWidget     *widget);
 
 static void goto_folder_cb      (MainWindow    *mainwin,
                                  guint          action,
@@ -577,6 +587,11 @@ static GtkItemFactoryEntry mainwin_entries[] =
        {N_("/_View/_Go to/Next la_beled message"),
                                                NULL, next_labeled_cb, 0, NULL},
        {N_("/_View/_Go to/---"),               NULL, NULL, 0, "<Separator>"},
+       {N_("/_View/_Go to/Last read message"),
+                                               NULL, last_read_cb, 0, NULL},
+       {N_("/_View/_Go to/Parent message"),
+                                               "<control>Up", parent_cb, 0, NULL},
+       {N_("/_View/_Go to/---"),               NULL, NULL, 0, "<Separator>"},
        {N_("/_View/_Go to/Next unread _folder"),       "<shift>G", goto_unread_folder_cb, 0, NULL},
        {N_("/_View/_Go to/_Other folder..."),  "G", goto_folder_cb, 0, NULL},
        {N_("/_View/---"),                      NULL, NULL, 0, "<Separator>"},
@@ -700,6 +715,10 @@ static GtkItemFactoryEntry mainwin_entries[] =
        {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 headers"),         "<control>H", show_all_header_cb, 0, "<ToggleItem>"},
+       {N_("/_View/Quotes"),                   NULL, NULL, 0, "<Branch>"},
+       {N_("/_View/Quotes/_Fold all"),         "<control><shift>Q", hide_quotes_cb, 1, "<ToggleItem>"},
+       {N_("/_View/Quotes/Fold from level _2"),NULL, hide_quotes_cb, 2, "<ToggleItem>"},
+       {N_("/_View/Quotes/Fold from level _3"),NULL, hide_quotes_cb, 3, "<ToggleItem>"},
        {N_("/_View/---"),                      NULL, NULL, 0, "<Separator>"},
        {N_("/_View/_Update summary"),          "<control><alt>U", update_summary_cb,  0, NULL},
 
@@ -2038,7 +2057,7 @@ SensitiveCond main_window_get_current_state(MainWindow *mainwin)
 
                if ((selection == SUMMARY_NONE && item->hide_read_msgs)
                    || selection != SUMMARY_NONE)
-                       state |= M_HIDE_READ_MSG;       
+                       state |= M_HIDE_READ_MSG;
        }               
        if (mainwin->summaryview->threaded)
                state |= M_THREADED;
@@ -2054,6 +2073,12 @@ SensitiveCond main_window_get_current_state(MainWindow *mainwin)
                state |= M_NEWS;
        else
                state |= M_NOT_NEWS;
+       if (prefs_common.actions_list && g_slist_length(prefs_common.actions_list))
+               state |= M_ACTIONS_EXIST;
+
+       if (procmsg_have_queued_mails_fast() && !procmsg_is_sending())
+               state |= M_HAVE_QUEUED_MAILS;
+
        if (selection == SUMMARY_SELECTED_SINGLE &&
            (item &&
             (folder_has_parent_of_type(item, F_DRAFT) ||
@@ -2121,8 +2146,11 @@ void main_window_set_menu_sensitive(MainWindow *mainwin)
                {"/View/Go to/Previous marked message" , M_MSG_EXIST},
                {"/View/Go to/Previous labeled message", M_MSG_EXIST},
                {"/View/Go to/Next labeled message", M_MSG_EXIST},
+               {"/View/Go to/Last read message"   , M_SINGLE_TARGET_EXIST},
+               {"/View/Go to/Parent message"      , M_SINGLE_TARGET_EXIST},
                {"/View/Open in new window"        , M_SINGLE_TARGET_EXIST},
                {"/View/Show all headers"          , M_SINGLE_TARGET_EXIST},
+               {"/View/Quotes"                    , M_SINGLE_TARGET_EXIST},
                {"/View/Message source"            , M_SINGLE_TARGET_EXIST},
 
                {"/Message/Receive/Get from current account"
@@ -2131,7 +2159,7 @@ void main_window_set_menu_sensitive(MainWindow *mainwin)
                                                 , M_HAVE_ACCOUNT|M_UNLOCKED},
                {"/Message/Receive/Cancel receiving"
                                                 , M_INC_ACTIVE},
-
+               {"/Message/Send queued messages"  , M_HAVE_ACCOUNT|M_HAVE_QUEUED_MAILS},
                {"/Message/Compose a news message", M_HAVE_NEWS_ACCOUNT},
                {"/Message/Reply"                 , M_HAVE_ACCOUNT|M_TARGET_EXIST},
                {"/Message/Reply to"              , M_HAVE_ACCOUNT|M_TARGET_EXIST},
@@ -2158,7 +2186,7 @@ void main_window_set_menu_sensitive(MainWindow *mainwin)
                {"/Tools/Filter selected messages"     , M_TARGET_EXIST|M_EXEC},
                {"/Tools/Create filter rule"           , M_SINGLE_TARGET_EXIST|M_UNLOCKED},
                {"/Tools/Create processing rule"       , M_SINGLE_TARGET_EXIST|M_UNLOCKED},
-               {"/Tools/Actions"                      , M_TARGET_EXIST},
+               {"/Tools/Actions"                      , M_TARGET_EXIST|M_ACTIONS_EXIST},
                {"/Tools/Execute"                      , M_DELAY_EXEC},
                {"/Tools/Delete duplicated messages/In selected folder"   , M_MSG_EXIST|M_ALLOW_DELETE},
 
@@ -2255,6 +2283,15 @@ void main_window_set_menu_sensitive(MainWindow *mainwin)
                SET_CHECK_MENU_ACTIVE("/View/Show all headers",
                              mainwin->messageview->mimeview->textview->show_all_headers);
        SET_CHECK_MENU_ACTIVE("/View/Thread view", (state & M_THREADED) != 0);
+       SET_CHECK_MENU_ACTIVE("/View/Quotes/Fold all", FALSE);
+       SET_CHECK_MENU_ACTIVE("/View/Quotes/Fold from level 2", FALSE);
+       SET_CHECK_MENU_ACTIVE("/View/Quotes/Fold from level 3", FALSE);
+       if (prefs_common.hide_quotes == 1)
+               SET_CHECK_MENU_ACTIVE("/View/Quotes/Fold all", TRUE);
+       if (prefs_common.hide_quotes == 2)
+               SET_CHECK_MENU_ACTIVE("/View/Quotes/Fold from level 2", TRUE);
+       if (prefs_common.hide_quotes == 3)
+               SET_CHECK_MENU_ACTIVE("/View/Quotes/Fold from level 3", TRUE);
 
 #undef SET_CHECK_MENU_ACTIVE
 
@@ -3142,15 +3179,16 @@ static void online_switch_clicked (GtkButton *btn, gpointer data)
        g_return_if_fail(menuitem != NULL);
        
        if (btn == GTK_BUTTON(mainwin->online_switch)) {
-               /* go offline */
-               if (prefs_common.work_offline)
-                       return;
-               mainwindow_check_synchronise(mainwin, TRUE);
                gtk_widget_hide (mainwin->online_switch);
                gtk_widget_show (mainwin->offline_switch);
                menuitem->active = TRUE;
+               inc_autocheck_timer_remove();
+                       
+               /* go offline */
+               if (prefs_common.work_offline)
+                       return;
                prefs_common.work_offline = TRUE;
-               inc_autocheck_timer_remove();           
+               mainwindow_check_synchronise(mainwin, TRUE);
                imap_disconnect_all();
        } else {
                /*go online */
@@ -3228,6 +3266,34 @@ static void show_all_header_cb(MainWindow *mainwin, guint action,
                                     GTK_CHECK_MENU_ITEM(widget)->active);
 }
 
+#define SET_CHECK_MENU_ACTIVE(path, active) \
+{ \
+       menuitem = gtk_item_factory_get_widget(ifactory, path); \
+       gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), active); \
+}
+
+static void hide_quotes_cb(MainWindow *mainwin, guint action,
+                              GtkWidget *widget)
+{
+       GtkWidget *menuitem;
+       GtkItemFactory *ifactory = mainwin->menu_factory;
+
+       if (mainwin->menu_lock_count) return;
+
+       prefs_common.hide_quotes = 
+                       GTK_CHECK_MENU_ITEM(widget)->active ? action : 0;
+
+       mainwin->menu_lock_count++;
+       SET_CHECK_MENU_ACTIVE("/View/Quotes/Fold all", FALSE);
+       SET_CHECK_MENU_ACTIVE("/View/Quotes/Fold from level 2", FALSE);
+       SET_CHECK_MENU_ACTIVE("/View/Quotes/Fold from level 3", FALSE);
+       gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widget), prefs_common.hide_quotes > 0);
+       mainwin->menu_lock_count--;
+
+       summary_redisplay_msg(mainwin->summaryview);
+}
+
+#undef SET_CHECK_MENU_ACTIVE
 static void mark_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
 {
        summary_mark(mainwin->summaryview);
@@ -3522,6 +3588,18 @@ static void next_labeled_cb(MainWindow *mainwin, guint action,
        summary_select_next_labeled(mainwin->summaryview);
 }
 
+static void last_read_cb(MainWindow *mainwin, guint action,
+                           GtkWidget *widget)
+{
+       summary_select_last_read(mainwin->summaryview);
+}
+
+static void parent_cb(MainWindow *mainwin, guint action,
+                           GtkWidget *widget)
+{
+       summary_select_parent(mainwin->summaryview);
+}
+
 static void goto_folder_cb(MainWindow *mainwin, guint action,
                           GtkWidget *widget)
 {
@@ -3579,7 +3657,7 @@ static void prefs_pre_processing_open_cb(MainWindow *mainwin, guint action,
        prefs_filtering_open(&pre_global_processing,
                             _("Processing rules to apply before folder rules"),
                             MANUAL_ANCHOR_PROCESSING,
-                            NULL, NULL);
+                            NULL, NULL, FALSE);
 }
 
 static void prefs_post_processing_open_cb(MainWindow *mainwin, guint action,
@@ -3588,7 +3666,7 @@ static void prefs_post_processing_open_cb(MainWindow *mainwin, guint action,
        prefs_filtering_open(&post_global_processing,
                             _("Processing rules to apply after folder rules"),
                             MANUAL_ANCHOR_PROCESSING,
-                            NULL, NULL);
+                            NULL, NULL, FALSE);
 }
 
 static void prefs_filtering_open_cb(MainWindow *mainwin, guint action,
@@ -3597,7 +3675,7 @@ static void prefs_filtering_open_cb(MainWindow *mainwin, guint action,
        prefs_filtering_open(&filtering_rules,
                             _("Filtering configuration"),
                             MANUAL_ANCHOR_FILTERING,
-                            NULL, NULL);
+                            NULL, NULL, TRUE);
 }
 
 static void prefs_template_open_cb(MainWindow *mainwin, guint action,