[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