2006-08-02 [colin] 2.4.0cvs18
[claws.git] / src / messageview.c
index 96fbb30c72901ef4019d02ee11ef61d81f012f32..eb3295f6eeb48e915bc6a94997ff1761ff432371 100644 (file)
@@ -120,6 +120,9 @@ static void view_source_cb          (gpointer        data,
 static void show_all_header_cb         (gpointer        data,
                                         guint           action,
                                         GtkWidget      *widget);
+static void hide_quotes_cb             (gpointer        data,
+                                        guint           action,
+                                        GtkWidget      *widget);
 
 static void compose_cb                 (gpointer        data,
                                         guint           action,
@@ -127,9 +130,6 @@ static void compose_cb                      (gpointer        data,
 static void reply_cb                   (gpointer        data,
                                         guint           action,
                                         GtkWidget      *widget);
-static void reedit_cb                  (gpointer        data,
-                                        guint           action,
-                                        GtkWidget      *widget);
 
 static PrefsAccount *select_account_from_list
                                        (GList          *ac_list);
@@ -277,6 +277,10 @@ static GtkItemFactoryEntry msgview_entries[] =
        {N_("/_View/---"),              NULL, NULL, 0, "<Separator>"},
        {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/_Hide all"),         "<control><shift>Q", hide_quotes_cb, 1, "<ToggleItem>"},
+       {N_("/_View/Quotes/Hide from level _2"),NULL, hide_quotes_cb, 2, "<ToggleItem>"},
+       {N_("/_View/Quotes/Hide from level _3"),NULL, hide_quotes_cb, 3, "<ToggleItem>"},
 
        {N_("/_Message"),               NULL, NULL, 0, "<Branch>"},
        {N_("/_Message/Compose _new message"),
@@ -294,8 +298,6 @@ static GtkItemFactoryEntry msgview_entries[] =
        {N_("/_Message/For_ward as attachment"),
                                        NULL, reply_cb, COMPOSE_FORWARD_AS_ATTACH, NULL},
        {N_("/_Message/Redirec_t"),     NULL, reply_cb, COMPOSE_REDIRECT, NULL},
-       {N_("/_Message/---"),           NULL, NULL, 0, "<Separator>"},
-       {N_("/_Message/Re-_edit"),      NULL, reedit_cb, 0, NULL},
 
        {N_("/_Tools"),                 NULL, NULL, 0, "<Branch>"},
        {N_("/_Tools/_Address book"),   "<control><shift>A", addressbook_open_cb, 0, NULL},
@@ -444,7 +446,7 @@ MessageView *messageview_create_with_new_window(MainWindow *mainwin)
        static GdkGeometry geometry;
 
        window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-       gtk_window_set_title(GTK_WINDOW(window), _("Sylpheed - Message View"));
+       gtk_window_set_title(GTK_WINDOW(window), _("Sylpheed-Claws - Message View"));
        gtk_window_set_resizable(GTK_WINDOW(window), TRUE);
 
        if (!geometry.min_height) {
@@ -654,7 +656,7 @@ static gint disposition_notification_send(MsgInfo *msginfo)
                g_free(path);
        }               
 
-       fprintf(fp, "\n");
+       fprintf(fp, "X-Sylpheed-End-Special-Headers: 1\n");
        
        /* Date */
        get_rfc822_date(buf, sizeof(buf));
@@ -788,8 +790,11 @@ gint messageview_show(MessageView *messageview, MsgInfo *msginfo,
 
        while ((encinfo = find_encrypted_part(mimeinfo)) != NULL) {
                debug_print("decrypting message part\n");
-               if (privacy_mimeinfo_decrypt(encinfo) < 0)
+               if (privacy_mimeinfo_decrypt(encinfo) < 0) {
+                       alertpanel_error(_("Couldn't decrypt: %s"),
+                               privacy_get_error());
                        break;
+               }
        }
        
        messageview->updating = TRUE;
@@ -848,7 +853,8 @@ gint messageview_show(MessageView *messageview, MsgInfo *msginfo,
                                  messageview->msginfo);
        else if ((messageview->msginfo->dispositionnotificationto || 
             messageview->msginfo->returnreceiptto) &&
-           !MSG_IS_RETRCPT_SENT(messageview->msginfo->flags))
+           !MSG_IS_RETRCPT_SENT(messageview->msginfo->flags) &&
+           !prefs_common.never_send_retrcpt)
                return_receipt_show(messageview->noticeview, 
                                    messageview->msginfo);
        else 
@@ -1513,6 +1519,40 @@ static void show_all_header_cb(gpointer data, guint action, GtkWidget *widget)
        main_window_set_menu_sensitive(messageview->mainwin);
 }
 
+#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(gpointer data, guint action, GtkWidget *widget)
+{
+       MessageView *messageview = (MessageView *)data;
+       MsgInfo *msginfo = messageview->msginfo;
+       static gboolean updating_menu = FALSE;
+       GtkItemFactory *ifactory = gtk_item_factory_from_widget(messageview->menubar);
+       GtkWidget *menuitem;
+       if (updating_menu)
+               return;
+
+       prefs_common.hide_quotes = 
+                       GTK_CHECK_MENU_ITEM(widget)->active ? action : 0;
+       
+       updating_menu=TRUE;
+       SET_CHECK_MENU_ACTIVE("/View/Quotes/Hide all", FALSE);
+       SET_CHECK_MENU_ACTIVE("/View/Quotes/Hide from level 2", FALSE);
+       SET_CHECK_MENU_ACTIVE("/View/Quotes/Hide from level 3", FALSE);
+       gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widget), prefs_common.hide_quotes > 0);      
+       updating_menu=FALSE;
+       if (!msginfo) return;
+       messageview->msginfo = NULL;
+       messageview_show(messageview, msginfo,
+                        messageview->all_headers);
+       procmsg_msginfo_free(msginfo);
+       main_window_set_menu_sensitive(messageview->mainwin);
+}
+#undef SET_CHECK_MENU_ACTIVE
+
 static void compose_cb(gpointer data, guint action, GtkWidget *widget)
 {
        MessageView *messageview = (MessageView *)data;
@@ -1546,22 +1586,6 @@ static void reply_cb(gpointer data, guint action, GtkWidget *widget)
        g_slist_free(msginfo_list);
 }
 
-static void reedit_cb(gpointer data, guint action, GtkWidget *widget)
-{
-       MessageView *messageview = (MessageView *)data;
-       MsgInfo *msginfo;
-
-       if (!messageview->msginfo) return;
-       msginfo = messageview->msginfo;
-       if (!msginfo->folder) return;
-       if (!folder_has_parent_of_type(msginfo->folder, F_DRAFT) &&
-           !folder_has_parent_of_type(msginfo->folder, F_OUTBOX) &&
-           !folder_has_parent_of_type(msginfo->folder, F_QUEUE)) 
-               return;
-
-       compose_reedit(msginfo, FALSE);
-}
-
 static void addressbook_open_cb(gpointer data, guint action, GtkWidget *widget)
 {
        addressbook_open(NULL);
@@ -1643,6 +1667,20 @@ void messageview_set_menu_sensitive(MessageView *messageview)
                gtk_check_menu_item_set_active
                        (GTK_CHECK_MENU_ITEM(menuitem),
                         messageview->mimeview->textview->show_all_headers);
+               if (prefs_common.hide_quotes) {
+                       if (prefs_common.hide_quotes == 1)
+                               menuitem = gtk_item_factory_get_widget(ifactory, 
+                                               "/View/Quotes/Hide all");
+                       if (prefs_common.hide_quotes == 2)
+                               menuitem = gtk_item_factory_get_widget(ifactory, 
+                                               "/View/Quotes/Hide from level 2");
+                       if (prefs_common.hide_quotes == 3)
+                               menuitem = gtk_item_factory_get_widget(ifactory, 
+                                               "/View/Quotes/Hide from level 3");
+                       gtk_check_menu_item_set_active
+                               (GTK_CHECK_MENU_ITEM(menuitem),
+                                TRUE);
+               }
        }
 }