[Commits] [SCM] claws branch, master, updated. 4.3.1-111-g75303bc85
wwp at claws-mail.org
wwp at claws-mail.org
Tue Apr 15 13:22:14 UTC 2025
The branch, master has been updated
via 75303bc85c77fe802d57e7762ab8ce736770631c (commit)
from e0155435215b3af4ea67626f5471a81bedb2cfe6 (commit)
Summary of changes:
src/folder_item_prefs.c | 8 +++++
src/folder_item_prefs.h | 12 +++++++
src/messageview.c | 4 ++-
src/prefs_folder_item.c | 88 +++++++++++++++++++++++++++++++++++++++++++++++--
src/textview.c | 8 ++++-
5 files changed, 116 insertions(+), 4 deletions(-)
- Log -----------------------------------------------------------------
commit 75303bc85c77fe802d57e7762ab8ce736770631c
Author: wwp <subscript at free.fr>
Date: Tue Apr 15 15:21:38 2025 +0200
Add more per-folder settings to handle HTML content.
diff --git a/src/folder_item_prefs.c b/src/folder_item_prefs.c
index c6fc6f024..3a716a70b 100644
--- a/src/folder_item_prefs.c
+++ b/src/folder_item_prefs.c
@@ -102,6 +102,10 @@ static PrefParam param[] = {
NULL, NULL, NULL},
{"remove_old_bodies", "FALSE", &tmp_prefs.remove_old_bodies, P_BOOL,
NULL, NULL, NULL},
+ {"render_html", "0", &tmp_prefs.render_html, P_ENUM,
+ NULL, NULL, NULL},
+ {"invoke_plugin_on_html", "0", &tmp_prefs.invoke_plugin_on_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,
@@ -231,6 +235,8 @@ static FolderItemPrefs *folder_item_prefs_clear(FolderItemPrefs *prefs)
prefs->offlinesync = FALSE;
prefs->offlinesync_days = 0;
prefs->remove_old_bodies = FALSE;
+ prefs->render_html = HTML_RENDER_DEFAULT;
+ prefs->invoke_plugin_on_html = INVOKE_PLUGIN_ON_HTML_DEFAULT;
prefs->promote_html_part = HTML_PROMOTE_DEFAULT;
prefs->skip_on_goto_unread_or_new = FALSE;
@@ -293,6 +299,8 @@ void folder_item_prefs_copy_prefs(FolderItem * src, FolderItem * dest)
tmp_prefs.offlinesync = src->prefs->offlinesync;
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.invoke_plugin_on_html = src->prefs->invoke_plugin_on_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;
diff --git a/src/folder_item_prefs.h b/src/folder_item_prefs.h
index e9f6d099b..32803f9e8 100644
--- a/src/folder_item_prefs.h
+++ b/src/folder_item_prefs.h
@@ -26,6 +26,16 @@
typedef struct _FolderItemPrefs FolderItemPrefs;
#include "folder.h"
+typedef enum {
+ HTML_RENDER_DEFAULT=0,
+ HTML_RENDER_NEVER,
+ HTML_RENDER_ALWAYS
+} HTMLRenderType;
+typedef enum {
+ INVOKE_PLUGIN_ON_HTML_DEFAULT=0,
+ INVOKE_PLUGIN_ON_HTML_NEVER,
+ INVOKE_PLUGIN_ON_HTML_ALWAYS
+} InvokePluginOnHTMLType;
typedef enum {
HTML_PROMOTE_DEFAULT=0,
HTML_PROMOTE_NEVER,
@@ -50,6 +60,8 @@ struct _FolderItemPrefs {
int offlinesync;
int offlinesync_days;
int remove_old_bodies;
+ HTMLRenderType render_html;
+ InvokePluginOnHTMLType invoke_plugin_on_html;
HTMLPromoteType promote_html_part;
gboolean skip_on_goto_unread_or_new;
diff --git a/src/messageview.c b/src/messageview.c
index 7abfec67a..abc957307 100644
--- a/src/messageview.c
+++ b/src/messageview.c
@@ -1540,7 +1540,9 @@ gint messageview_show(MessageView *messageview, MsgInfo *msginfo,
if (!mimeview_show_part(messageview->mimeview, mimeinfo))
mimeview_select_mimepart_icon(messageview->mimeview, root);
goto done;
- } else if (prefs_common.invoke_plugin_on_html) {
+ } else if ((msginfo->folder->prefs->invoke_plugin_on_html == INVOKE_PLUGIN_ON_HTML_ALWAYS ||
+ (msginfo->folder->prefs->invoke_plugin_on_html == INVOKE_PLUGIN_ON_HTML_DEFAULT &&
+ prefs_common.invoke_plugin_on_html))) {
mimeview_select_mimepart_icon(messageview->mimeview, mimeinfo);
goto done;
}
diff --git a/src/prefs_folder_item.c b/src/prefs_folder_item.c
index 9421acf56..02a310624 100644
--- a/src/prefs_folder_item.c
+++ b/src/prefs_folder_item.c
@@ -90,8 +90,10 @@ struct _FolderItemGeneralPage
GtkWidget *entry_offlinesync;
GtkWidget *label_end_offlinesync;
GtkWidget *checkbtn_remove_old_offlinesync;
+ GtkWidget *render_html;
+ GtkWidget *invoke_plugin_on_html;
GtkWidget *promote_html_part;
-
+
/* apply to sub folders */
GtkWidget *simplify_subject_rec_checkbtn;
GtkWidget *folder_chmod_rec_checkbtn;
@@ -101,6 +103,8 @@ struct _FolderItemGeneralPage
GtkWidget *newmailcheck_rec_checkbtn;
GtkWidget *skip_on_goto_unread_or_new_rec_checkbtn;
GtkWidget *offlinesync_rec_checkbtn;
+ GtkWidget *render_html_rec_checkbtn;
+ GtkWidget *invoke_plugin_on_html_rec_checkbtn;
GtkWidget *promote_html_part_rec_checkbtn;
GdkRGBA folder_color;
@@ -263,7 +267,11 @@ static void prefs_folder_item_general_create_widget_func(PrefsPage * page_,
GtkWidget *entry_offlinesync;
GtkWidget *label_end_offlinesync;
GtkWidget *checkbtn_remove_old_offlinesync;
+ GtkWidget *render_html;
+ GtkWidget *invoke_plugin_on_html;
GtkWidget *promote_html_part;
+ GtkListStore *render_html_menu;
+ GtkListStore *invoke_plugin_on_html_menu;
GtkListStore *promote_html_part_menu;
GtkWidget *simplify_subject_rec_checkbtn;
@@ -275,6 +283,8 @@ static void prefs_folder_item_general_create_widget_func(PrefsPage * page_,
GtkWidget *newmailcheck_rec_checkbtn;
GtkWidget *skip_on_goto_unread_or_new_rec_checkbtn;
GtkWidget *offlinesync_rec_checkbtn;
+ GtkWidget *render_html_rec_checkbtn;
+ GtkWidget *invoke_plugin_on_html_rec_checkbtn;
GtkWidget *promote_html_part_rec_checkbtn;
gint wreq1, wreq2;
@@ -515,6 +525,62 @@ static void prefs_folder_item_general_create_widget_func(PrefsPage * page_,
rowcount++;
+ /* Render HTML messages as text? */
+ 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(_("Render HTML messages as text"));
+ gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 0);
+
+ render_html = gtkut_sc_combobox_create (NULL, FALSE);
+ gtk_box_pack_start (GTK_BOX(hbox), render_html, FALSE, FALSE, 0);
+
+ render_html_menu = GTK_LIST_STORE(gtk_combo_box_get_model(
+ GTK_COMBO_BOX(render_html)));
+ COMBOBOX_ADD (render_html_menu, _("Default"), HTML_RENDER_DEFAULT);
+ COMBOBOX_ADD (render_html_menu, _("No"), HTML_RENDER_NEVER);
+ COMBOBOX_ADD (render_html_menu, _("Yes"), HTML_RENDER_ALWAYS);
+
+ combobox_select_by_data(GTK_COMBO_BOX(render_html),
+ item->prefs->render_html);
+
+ CLAWS_SET_TIP(hbox,
+ _("\"Default\" will follow global preference (found in '/Configuration/Preferences/Message View/Text Options')"));
+
+ render_html_rec_checkbtn = gtk_check_button_new();
+ gtk_grid_attach(GTK_GRID(table), render_html_rec_checkbtn, 2, rowcount, 1, 1);
+
+ rowcount++;
+
+ /* Render HTML-only messages with plugin if possible? */
+ 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(_("Render HTML-only messages with plugin if possible"));
+ gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 0);
+
+ invoke_plugin_on_html = gtkut_sc_combobox_create (NULL, FALSE);
+ gtk_box_pack_start (GTK_BOX(hbox), invoke_plugin_on_html, FALSE, FALSE, 0);
+
+ invoke_plugin_on_html_menu = GTK_LIST_STORE(gtk_combo_box_get_model(
+ GTK_COMBO_BOX(invoke_plugin_on_html)));
+ COMBOBOX_ADD (invoke_plugin_on_html_menu, _("Default"), INVOKE_PLUGIN_ON_HTML_DEFAULT);
+ COMBOBOX_ADD (invoke_plugin_on_html_menu, _("No"), INVOKE_PLUGIN_ON_HTML_NEVER);
+ COMBOBOX_ADD (invoke_plugin_on_html_menu, _("Yes"), INVOKE_PLUGIN_ON_HTML_ALWAYS);
+
+ combobox_select_by_data(GTK_COMBO_BOX(invoke_plugin_on_html),
+ item->prefs->invoke_plugin_on_html);
+
+ CLAWS_SET_TIP(hbox,
+ _("\"Default\" will follow global preference (found in '/Configuration/Preferences/Message View/Text Options')"));
+
+ invoke_plugin_on_html_rec_checkbtn = gtk_check_button_new();
+ gtk_grid_attach(GTK_GRID(table), invoke_plugin_on_html_rec_checkbtn, 2, rowcount, 1, 1);
+
+ rowcount++;
+
/* Select HTML part by default? */
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VSPACING_NARROW_2);
gtk_box_set_spacing(GTK_BOX(hbox), 8);
@@ -673,6 +739,8 @@ static void prefs_folder_item_general_create_widget_func(PrefsPage * page_,
page->entry_offlinesync = entry_offlinesync;
page->label_end_offlinesync = label_end_offlinesync;
page->checkbtn_remove_old_offlinesync = checkbtn_remove_old_offlinesync;
+ page->render_html = render_html;
+ page->invoke_plugin_on_html = invoke_plugin_on_html;
page->promote_html_part = promote_html_part;
page->simplify_subject_rec_checkbtn = simplify_subject_rec_checkbtn;
@@ -684,6 +752,8 @@ static void prefs_folder_item_general_create_widget_func(PrefsPage * page_,
page->newmailcheck_rec_checkbtn = newmailcheck_rec_checkbtn;
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->invoke_plugin_on_html_rec_checkbtn = invoke_plugin_on_html_rec_checkbtn;
page->promote_html_part_rec_checkbtn = promote_html_part_rec_checkbtn;
page->page.widget = table;
@@ -708,6 +778,8 @@ static void general_save_folder_prefs(FolderItem *folder, FolderItemGeneralPage
gboolean all = FALSE, summary_update_needed = FALSE;
SpecialFolderItemType type = F_NORMAL;
FolderView *folderview = mainwindow_get_mainwindow()->folderview;
+ HTMLRenderType render_html = HTML_RENDER_DEFAULT;
+ InvokePluginOnHTMLType invoke_plugin_on_html = INVOKE_PLUGIN_ON_HTML_DEFAULT;
HTMLPromoteType promote_html_part = HTML_PROMOTE_DEFAULT;
if (folder->path == NULL)
@@ -724,6 +796,16 @@ static void general_save_folder_prefs(FolderItem *folder, FolderItemGeneralPage
summary_update_needed = TRUE;
}
+ render_html =
+ combobox_get_active_data(GTK_COMBO_BOX(page->render_html));
+ if (all || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->render_html_rec_checkbtn)))
+ prefs->render_html = render_html;
+
+ invoke_plugin_on_html =
+ combobox_get_active_data(GTK_COMBO_BOX(page->invoke_plugin_on_html));
+ if (all || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->invoke_plugin_on_html_rec_checkbtn)))
+ prefs->invoke_plugin_on_html = invoke_plugin_on_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)))
@@ -819,7 +901,9 @@ 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->promote_html_part_rec_checkbtn))
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->render_html_rec_checkbtn)) ||
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->invoke_plugin_on_html_rec_checkbtn)) ||
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->promote_html_part_rec_checkbtn))
))
return TRUE;
else
diff --git a/src/textview.c b/src/textview.c
index 638a3adac..bb2518fec 100644
--- a/src/textview.c
+++ b/src/textview.c
@@ -1018,6 +1018,7 @@ static void textview_write_body(TextView *textview, MimeInfo *mimeinfo)
GSList *cur;
gboolean continue_write = TRUE;
glong wrote = 0, i = 0;
+ FolderItem *folder_item = NULL;
if (textview->messageview->forced_charset)
charset = textview->messageview->forced_charset;
@@ -1050,8 +1051,13 @@ static void textview_write_body(TextView *textview, MimeInfo *mimeinfo)
account_sigsep_matchlist_create();
+ if (textview->messageview->msginfo && textview->messageview->msginfo->folder)
+ folder_item = textview->messageview->msginfo->folder;
+
if (!g_ascii_strcasecmp(mimeinfo->subtype, "html") &&
- prefs_common.render_html) {
+ ((folder_item && folder_item->prefs && folder_item->prefs->render_html == HTML_RENDER_ALWAYS)
+ || ((folder_item && folder_item->prefs && folder_item->prefs->render_html == HTML_RENDER_DEFAULT)
+ && prefs_common.render_html))) {
gchar *filename;
filename = procmime_get_tmp_file_name(mimeinfo);
-----------------------------------------------------------------------
hooks/post-receive
--
Claws Mail
More information about the Commits
mailing list