[evolution] Bug #583450 - [prefer-plain] Ability to hide html attachments



commit eff08fcad7dd0b1cecd9d5d25d997d7b5ea41f84
Author: Milan Crha <mcrha redhat com>
Date:   Fri Oct 30 14:03:45 2009 +0100

    Bug #583450 - [prefer-plain] Ability to hide html attachments

 plugins/prefer-plain/prefer-plain.c |   50 ++++++++++++++++++++++++++--------
 1 files changed, 38 insertions(+), 12 deletions(-)
---
diff --git a/plugins/prefer-plain/prefer-plain.c b/plugins/prefer-plain/prefer-plain.c
index 58d3425..bd77e83 100644
--- a/plugins/prefer-plain/prefer-plain.c
+++ b/plugins/prefer-plain/prefer-plain.c
@@ -49,6 +49,7 @@ enum {
 
 static GConfClient *epp_gconf = NULL;
 static gint epp_mode = -1;
+static gboolean epp_show_suppressed = TRUE;
 
 static void
 make_part_attachment (EMFormat *format, CamelStream *stream, CamelMimePart *part, gint i)
@@ -83,7 +84,7 @@ org_gnome_prefer_plain_text_html (gpointer ep, EMFormatHookTarget *t)
 	    || strstr (t->format->part_id->str, ".alternative-prefer-plain.") != NULL
 	    || em_format_is_inline (t->format, t->format->part_id->str, t->part, &(t->item->handler)))
 		t->item->handler.old->handler (t->format, t->stream, t->part, t->item->handler.old);
-	else
+	else if (epp_show_suppressed)
 		make_part_attachment (t->format, t->stream, t->part, -1);
 }
 
@@ -186,7 +187,8 @@ org_gnome_prefer_plain_multipart_alternative(gpointer ep, EMFormatHookTarget *t)
 	}
 
 	/* all other parts are attachments */
-	export_as_attachments (mp, t->format, t->stream, display_part);
+	if (epp_show_suppressed)
+		export_as_attachments (mp, t->format, t->stream, display_part);
 
 	g_string_truncate(t->format->part_id, partidlen);
 }
@@ -196,9 +198,9 @@ static struct {
 	const gchar *label;
 	const gchar *description;
 } epp_options[] = {
-	{ "normal",       N_("Show HTML if present"), N_("Let Evolution choose the best part to show.") },
-	{ "prefer_plain", N_("Prefer PLAIN"),         N_("Show plain text part, if present, otherwise let Evolution choose the best part to show.") },
-	{ "only_plain",   N_("Only ever show PLAIN"), N_("Always show plain text part and make attachments from other parts.") },
+	{ "normal",       N_("Show HTML if present"),       N_("Let Evolution choose the best part to show.") },
+	{ "prefer_plain", N_("Show plain text if present"), N_("Show plain text part, if present, otherwise let Evolution choose the best part to show.") },
+	{ "only_plain",   N_("Only ever show plain text"),  N_("Always show plain text part and make attachments from other parts, if requested.") },
 };
 
 static void
@@ -222,6 +224,15 @@ epp_mode_changed(GtkComboBox *dropdown, GtkWidget *info_label)
 	update_info_label (info_label, epp_mode);
 }
 
+static void
+epp_show_suppressed_toggled (GtkToggleButton *check, gpointer data)
+{
+	g_return_if_fail (check != NULL);
+
+	epp_show_suppressed = gtk_toggle_button_get_active (check);
+	gconf_client_set_bool (epp_gconf, "/apps/evolution/eplugin/prefer_plain/show_suppressed", epp_show_suppressed, NULL);
+}
+
 GtkWidget *
 org_gnome_prefer_plain_config_mode(struct _EPlugin *epl, struct _EConfigHookItemFactoryData *data)
 {
@@ -229,13 +240,18 @@ org_gnome_prefer_plain_config_mode(struct _EPlugin *epl, struct _EConfigHookItem
 	GtkComboBox *dropdown;
 	GtkCellRenderer *cell;
 	GtkListStore *store;
-	GtkWidget *w, *info;
+	GtkWidget *dropdown_label, *info, *check;
 	gint i;
 	GtkTreeIter iter;
 
 	if (data->old)
 		return data->old;
 
+	check = gtk_check_button_new_with_mnemonic (_("Show s_uppressed HTML parts as attachments"));
+	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), epp_show_suppressed);
+	gtk_widget_show (check);
+	g_signal_connect (check, "toggled", G_CALLBACK (epp_show_suppressed_toggled), NULL);
+
 	dropdown = (GtkComboBox *)gtk_combo_box_new();
 	cell = gtk_cell_renderer_text_new();
 	store = gtk_list_store_new(1, G_TYPE_STRING);
@@ -251,9 +267,9 @@ org_gnome_prefer_plain_config_mode(struct _EPlugin *epl, struct _EConfigHookItem
 	gtk_combo_box_set_active(dropdown, epp_mode);
 	gtk_widget_show((GtkWidget *)dropdown);
 
-	w = gtk_label_new_with_mnemonic(_("HTML _Mode"));
-	gtk_widget_show(w);
-	gtk_label_set_mnemonic_widget(GTK_LABEL(w),(GtkWidget *)dropdown);
+	dropdown_label = gtk_label_new_with_mnemonic (_("HTML _Mode"));
+	gtk_widget_show (dropdown_label);
+	gtk_label_set_mnemonic_widget (GTK_LABEL (dropdown_label), (GtkWidget *)dropdown);
 
 	info = gtk_label_new (NULL);
 	gtk_misc_set_alignment (GTK_MISC (info), 0.0, 0.5);
@@ -265,9 +281,10 @@ org_gnome_prefer_plain_config_mode(struct _EPlugin *epl, struct _EConfigHookItem
 	g_signal_connect (dropdown, "changed", G_CALLBACK(epp_mode_changed), info);
 
 	i = ((GtkTable *)data->parent)->nrows;
-	gtk_table_attach((GtkTable *)data->parent, w, 0, 1, i, i+1, 0, 0, 0, 0);
-	gtk_table_attach((GtkTable *)data->parent, (GtkWidget *)dropdown, 1, 2, i, i+1, GTK_FILL|GTK_EXPAND, 0, 0, 0);
-	gtk_table_attach((GtkTable *)data->parent, info, 1, 2, i + 1, i + 2, GTK_FILL|GTK_EXPAND, 0, 0, 0);
+	gtk_table_attach((GtkTable *)data->parent, check, 0, 2, i, i + 1, GTK_FILL | GTK_EXPAND, 0, 0, 0);
+	gtk_table_attach((GtkTable *)data->parent, dropdown_label, 0, 1, i + 1, i + 2, 0, 0, 0, 0);
+	gtk_table_attach((GtkTable *)data->parent, (GtkWidget *)dropdown, 1, 2, i + 1, i + 2, GTK_FILL | GTK_EXPAND, 0, 0, 0);
+	gtk_table_attach((GtkTable *)data->parent, info, 1, 2, i + 2, i + 3, GTK_FILL | GTK_EXPAND, 0, 0, 0);
 
 	/* since this isnt dynamic, we don't need to track each item */
 
@@ -286,6 +303,8 @@ e_plugin_lib_enable(EPlugin *ep, gint enable)
 		return 0;
 
 	if (enable) {
+		GConfValue *val;
+
 		epp_gconf = gconf_client_get_default();
 		key = gconf_client_get_string(epp_gconf, "/apps/evolution/eplugin/prefer_plain/mode", NULL);
 		if (key) {
@@ -299,6 +318,13 @@ e_plugin_lib_enable(EPlugin *ep, gint enable)
 		} else {
 			epp_mode = 0;
 		}
+
+		val = gconf_client_get (epp_gconf, "/apps/evolution/eplugin/prefer_plain/show_suppressed", NULL);
+		if (val) {
+			epp_show_suppressed = gconf_value_get_bool (val);
+			gconf_value_free (val);
+		} else
+			epp_show_suppressed = TRUE;
 	} else {
 		if (epp_gconf) {
 			g_object_unref(epp_gconf);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]