talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

commit 1c5b33db2fbb18d1a1eb71cbaeff55f13dd67640
parent 768250ffdb392e65ca586b65d3aa790a204f2db5
Author: Oliver Lowe <o@olowe.co>
Date:   Sun, 31 Aug 2025 12:12:39 +1000

Never promote HTML part of multipart messages

Accessibility, security wins

Diffstat:
Msrc/folder_item_prefs.c | 4----
Msrc/folder_item_prefs.h | 1-
Msrc/messageview.c | 18+-----------------
Msrc/prefs_common.c | 2--
Msrc/prefs_common.h | 1-
Msrc/prefs_folder_item.c | 44+-------------------------------------------
Msrc/prefs_message.c | 23-----------------------
7 files changed, 2 insertions(+), 91 deletions(-)

diff --git a/src/folder_item_prefs.c b/src/folder_item_prefs.c @@ -91,8 +91,6 @@ static PrefParam param[] = { NULL, NULL, NULL}, {"render_html", "0", &tmp_prefs.render_html, P_ENUM, NULL, NULL, NULL}, - {"promote_html_part", "0", &tmp_prefs.promote_html_part, P_ENUM, - NULL, NULL, NULL}, {"skip_on_goto_unread_or_new", "FALSE", &tmp_prefs.skip_on_goto_unread_or_new, P_BOOL, NULL, NULL, NULL}, @@ -185,7 +183,6 @@ static FolderItemPrefs *folder_item_prefs_clear(FolderItemPrefs *prefs) prefs->offlinesync_days = 0; prefs->remove_old_bodies = FALSE; prefs->render_html = HTML_RENDER_DEFAULT; - prefs->promote_html_part = HTML_PROMOTE_DEFAULT; prefs->skip_on_goto_unread_or_new = FALSE; return prefs; } @@ -226,7 +223,6 @@ void folder_item_prefs_copy_prefs(FolderItem * src, FolderItem * dest) tmp_prefs.offlinesync_days = src->prefs->offlinesync_days; tmp_prefs.remove_old_bodies = src->prefs->remove_old_bodies; tmp_prefs.render_html = src->prefs->render_html; - tmp_prefs.promote_html_part = src->prefs->promote_html_part; tmp_prefs.skip_on_goto_unread_or_new = src->prefs->skip_on_goto_unread_or_new; prefs_matcher_read_config(); diff --git a/src/folder_item_prefs.h b/src/folder_item_prefs.h @@ -57,7 +57,6 @@ struct _FolderItemPrefs { int offlinesync_days; int remove_old_bodies; HTMLRenderType render_html; - HTMLPromoteType promote_html_part; gboolean skip_on_goto_unread_or_new; gboolean request_return_receipt; diff --git a/src/messageview.c b/src/messageview.c @@ -824,13 +824,6 @@ static gboolean messageview_try_select_mimeinfo(MessageView *messageview, MsgInf && mimeview_has_viewer_for_content_type(messageview->mimeview, "text/calendar")) { mimeview_select_mimepart_icon(messageview->mimeview, mimeinfo); return TRUE; - } else if (!strcasecmp(mimeinfo->subtype, "html") - && mimeinfo->disposition != DISPOSITIONTYPE_ATTACHMENT - && ((msginfo->folder && msginfo->folder->prefs->promote_html_part == HTML_PROMOTE_ALWAYS) - || ((msginfo->folder && msginfo->folder->prefs->promote_html_part == HTML_PROMOTE_DEFAULT) - && prefs_common.promote_html_part))) { - mimeview_select_mimepart_icon(messageview->mimeview, mimeinfo); - return TRUE; } } return FALSE; @@ -1058,16 +1051,7 @@ gint messageview_show(MessageView *messageview, MsgInfo *msginfo, } } messageview_find_part_depth_first(&context, MIMETYPE_TEXT, "html"); - if (context.found && - (msginfo->folder->prefs->promote_html_part == HTML_PROMOTE_ALWAYS || - (msginfo->folder->prefs->promote_html_part == HTML_PROMOTE_DEFAULT && - prefs_common.promote_html_part))) { /* html found */ - mimeinfo = context.found; - if (messageview_try_select_mimeinfo(messageview, msginfo, mimeinfo)) - goto done; - } else - mimeinfo = root; /* nothing found */ - + mimeinfo = root; if (!mimeview_show_part(messageview->mimeview, mimeinfo)) mimeview_select_mimepart_icon(messageview->mimeview, root); goto done; diff --git a/src/prefs_common.c b/src/prefs_common.c @@ -497,8 +497,6 @@ static PrefParam param[] = { NULL, NULL, NULL}, {"render_html", "TRUE", &prefs_common.render_html, P_BOOL, NULL, NULL, NULL}, - {"promote_html_part", "FALSE", &prefs_common.promote_html_part, P_BOOL, - NULL, NULL, NULL}, {"line_space", "2", &prefs_common.line_space, P_INT, NULL, NULL, NULL}, {"never_send_retrcpt", "FALSE", &prefs_common.never_send_retrcpt, P_BOOL, diff --git a/src/prefs_common.h b/src/prefs_common.h @@ -323,7 +323,6 @@ struct _PrefsCommon gboolean display_header; gint line_space; gboolean render_html; - gboolean promote_html_part; gboolean hide_quoted; gboolean respect_flowed_format; gboolean show_all_headers; diff --git a/src/prefs_folder_item.c b/src/prefs_folder_item.c @@ -84,7 +84,6 @@ struct _FolderItemGeneralPage GtkWidget *label_end_offlinesync; GtkWidget *checkbtn_remove_old_offlinesync; GtkWidget *render_html; - GtkWidget *promote_html_part; /* apply to sub folders */ GtkWidget *simplify_subject_rec_checkbtn; @@ -95,7 +94,6 @@ struct _FolderItemGeneralPage GtkWidget *skip_on_goto_unread_or_new_rec_checkbtn; GtkWidget *offlinesync_rec_checkbtn; GtkWidget *render_html_rec_checkbtn; - GtkWidget *promote_html_part_rec_checkbtn; }; struct _FolderItemComposePage @@ -214,9 +212,7 @@ static void prefs_folder_item_general_create_widget_func(PrefsPage * page_, GtkWidget *label_end_offlinesync; GtkWidget *checkbtn_remove_old_offlinesync; GtkWidget *render_html; - GtkWidget *promote_html_part; GtkListStore *render_html_menu; - GtkListStore *promote_html_part_menu; GtkWidget *simplify_subject_rec_checkbtn; @@ -227,7 +223,6 @@ static void prefs_folder_item_general_create_widget_func(PrefsPage * page_, GtkWidget *skip_on_goto_unread_or_new_rec_checkbtn; GtkWidget *offlinesync_rec_checkbtn; GtkWidget *render_html_rec_checkbtn; - GtkWidget *promote_html_part_rec_checkbtn; gint wreq1, wreq2; @@ -465,34 +460,6 @@ static void prefs_folder_item_general_create_widget_func(PrefsPage * page_, rowcount++; - /* Select HTML part by default? */ - hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VSPACING_NARROW_2); - gtk_box_set_spacing(GTK_BOX(hbox), 8); - gtk_grid_attach(GTK_GRID(table), hbox, 0, rowcount, 1, 1); - - label = gtk_label_new(_("Select the HTML part of multipart messages")); - gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 0); - - promote_html_part = gtkut_sc_combobox_create (NULL, FALSE); - gtk_box_pack_start (GTK_BOX(hbox), promote_html_part, FALSE, FALSE, 0); - - promote_html_part_menu = GTK_LIST_STORE(gtk_combo_box_get_model( - GTK_COMBO_BOX(promote_html_part))); - COMBOBOX_ADD (promote_html_part_menu, _("Default"), HTML_PROMOTE_DEFAULT); - COMBOBOX_ADD (promote_html_part_menu, _("No"), HTML_PROMOTE_NEVER); - COMBOBOX_ADD (promote_html_part_menu, _("Yes"), HTML_PROMOTE_ALWAYS); - - combobox_select_by_data(GTK_COMBO_BOX(promote_html_part), - item->prefs->promote_html_part); - - CLAWS_SET_TIP(hbox, - _("\"Default\" will follow global preference (found in '/Configuration/Preferences/Message View/Text Options')")); - - promote_html_part_rec_checkbtn = gtk_check_button_new(); - gtk_grid_attach(GTK_GRID(table), promote_html_part_rec_checkbtn, 2, rowcount, 1, 1); - - rowcount++; - /* Skip folder on 'goto unread (or new) message' */ checkbtn_skip_on_goto_unread_or_new = gtk_check_button_new_with_label( _("Skip folder when searching for unread or new messages")); @@ -623,7 +590,6 @@ static void prefs_folder_item_general_create_widget_func(PrefsPage * page_, page->label_end_offlinesync = label_end_offlinesync; page->checkbtn_remove_old_offlinesync = checkbtn_remove_old_offlinesync; page->render_html = render_html; - page->promote_html_part = promote_html_part; page->simplify_subject_rec_checkbtn = simplify_subject_rec_checkbtn; @@ -634,7 +600,6 @@ static void prefs_folder_item_general_create_widget_func(PrefsPage * page_, page->skip_on_goto_unread_or_new_rec_checkbtn = skip_on_goto_unread_or_new_rec_checkbtn; page->offlinesync_rec_checkbtn = offlinesync_rec_checkbtn; page->render_html_rec_checkbtn = render_html_rec_checkbtn; - page->promote_html_part_rec_checkbtn = promote_html_part_rec_checkbtn; page->page.widget = table; @@ -659,7 +624,6 @@ static void general_save_folder_prefs(FolderItem *folder, FolderItemGeneralPage SpecialFolderItemType type = F_NORMAL; FolderView *folderview = mainwindow_get_mainwindow()->folderview; HTMLRenderType render_html = HTML_RENDER_DEFAULT; - HTMLPromoteType promote_html_part = HTML_PROMOTE_DEFAULT; if (folder->path == NULL) return; @@ -680,11 +644,6 @@ static void general_save_folder_prefs(FolderItem *folder, FolderItemGeneralPage if (all || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->render_html_rec_checkbtn))) prefs->render_html = render_html; - promote_html_part = - combobox_get_active_data(GTK_COMBO_BOX(page->promote_html_part)); - if (all || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->promote_html_part_rec_checkbtn))) - prefs->promote_html_part = promote_html_part; - if (all || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->simplify_subject_rec_checkbtn))) { gboolean old_simplify_subject = prefs->enable_simplify_subject; int regexp_diffs = g_strcmp0(prefs->simplify_subject_regexp, gtk_editable_get_chars( @@ -764,8 +723,7 @@ static gboolean general_save_recurse_func(GNode *node, gpointer data) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->newmailcheck_rec_checkbtn)) || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->offlinesync_rec_checkbtn)) || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->skip_on_goto_unread_or_new_rec_checkbtn)) || - gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->render_html_rec_checkbtn)) || - gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->promote_html_part_rec_checkbtn)) + gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->render_html_rec_checkbtn)) )) return TRUE; else diff --git a/src/prefs_message.c b/src/prefs_message.c @@ -49,7 +49,6 @@ typedef struct _MessagePage GtkWidget *checkbtn_disphdr; GtkWidget *checkbtn_html; - GtkWidget *checkbtn_promote_html_part; GtkWidget *spinbtn_linespc; GtkWidget *checkbtn_hide_quoted; @@ -69,16 +68,12 @@ static void prefs_message_create_widget(PrefsPage *_page, GtkWindow *window, GtkWidget *button_edit_disphdr; GtkWidget *checkbtn_html; - GtkWidget *checkbtn_promote_html_part; GtkWidget *hbox_linespc; GtkWidget *label_linespc; GtkAdjustment *spinbtn_linespc_adj; GtkWidget *spinbtn_linespc; GtkWidget *frame; - GtkWidget *vbox_scr; - GtkWidget *hbox_scr; - GtkWidget *label_scr; GtkWidget *checkbtn_hide_quoted; GtkWidget *checkbtn_attach_desc; @@ -111,13 +106,9 @@ static void prefs_message_create_widget(PrefsPage *_page, GtkWindow *window, SET_TOGGLE_SENSITIVITY(checkbtn_disphdr, button_edit_disphdr); vbox2 = gtkut_get_options_frame(vbox1, &frame, _("HTML messages")); - PACK_CHECK_BUTTON(vbox2, checkbtn_html, _("Render HTML messages as text")); - PACK_CHECK_BUTTON(vbox2, checkbtn_promote_html_part, - _("Select the HTML part of multipart/alternative messages")); - hbox1 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 32); gtk_widget_show (hbox1); gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0); @@ -145,15 +136,6 @@ static void prefs_message_create_widget(PrefsPage *_page, GtkWindow *window, FALSE, FALSE, 0); gtk_widget_show_all (hbox1); - vbox_scr = gtkut_get_options_frame(vbox1, &frame, _("Scroll")); - hbox1 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 32); - gtk_widget_show (hbox1); - gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0); - - hbox_scr = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 8); - gtk_widget_show (hbox_scr); - gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0); - PACK_CHECK_BUTTON(vbox1, checkbtn_attach_desc, _("Show attachment descriptions (rather than names)")); @@ -178,8 +160,6 @@ static void prefs_message_create_widget(PrefsPage *_page, GtkWindow *window, prefs_common.display_header); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_html), prefs_common.render_html); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_promote_html_part), - prefs_common.promote_html_part); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_hide_quoted), prefs_common.hide_quoted); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_attach_desc), @@ -190,7 +170,6 @@ static void prefs_message_create_widget(PrefsPage *_page, GtkWindow *window, prefs_message->window = GTK_WIDGET(window); prefs_message->checkbtn_disphdr = checkbtn_disphdr; prefs_message->checkbtn_html = checkbtn_html; - prefs_message->checkbtn_promote_html_part = checkbtn_promote_html_part; prefs_message->spinbtn_linespc = spinbtn_linespc; prefs_message->checkbtn_hide_quoted = checkbtn_hide_quoted; prefs_message->checkbtn_attach_desc = checkbtn_attach_desc; @@ -206,8 +185,6 @@ static void prefs_message_save(PrefsPage *_page) GTK_TOGGLE_BUTTON(page->checkbtn_disphdr)); prefs_common.render_html = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(page->checkbtn_html)); - prefs_common.promote_html_part = gtk_toggle_button_get_active( - GTK_TOGGLE_BUTTON(page->checkbtn_promote_html_part)); prefs_common.hide_quoted = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(page->checkbtn_hide_quoted)); prefs_common.attach_desc = gtk_toggle_button_get_active(