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:
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(