359 lines
13 KiB
Diff
359 lines
13 KiB
Diff
? mail.error
|
|
Index: mail/em-format-html-display.c
|
|
===================================================================
|
|
--- mail/em-format-html-display.c.orig
|
|
+++ mail/em-format-html-display.c
|
|
@@ -2580,3 +2580,161 @@ efhd_format_optional(EMFormat *emf, Came
|
|
|
|
g_free(classid);
|
|
}
|
|
+
|
|
+static void
|
|
+efhd_optional_button_show (GtkWidget *widget, GtkWidget *w)
|
|
+{
|
|
+ GtkWidget *label = g_object_get_data (widget, "text-label");
|
|
+
|
|
+ if (GTK_WIDGET_VISIBLE (w)) {
|
|
+ gtk_widget_hide (w);
|
|
+ gtk_label_set_text_with_mnemonic (label, _("View _Unformatted"));
|
|
+ } else {
|
|
+ gtk_label_set_text_with_mnemonic (label, _("Hide _Unformatted"));
|
|
+ gtk_widget_show (w);
|
|
+ }
|
|
+}
|
|
+
|
|
+static void
|
|
+efhd_resize (GtkWidget *w, GtkAllocation *event, EMFormatHTML *efh)
|
|
+{
|
|
+ gtk_widget_set_size_request (w, ((GtkWidget *)efh->html)->allocation.width-48, 250);
|
|
+}
|
|
+
|
|
+/* optional render attachment button callback */
|
|
+static gboolean
|
|
+efhd_attachment_optional(EMFormatHTML *efh, GtkHTMLEmbedded *eb, EMFormatHTMLPObject *pobject)
|
|
+{
|
|
+ EMFormatHTMLDisplay *efhd = (EMFormatHTMLDisplay *)efh;
|
|
+ EAttachment *new;
|
|
+ struct _attach_puri *info;
|
|
+ GtkWidget *hbox, *vbox, *w, *button, *mainbox, *scroll, *label, *img;
|
|
+ char *simple_type, *tmp, *new_file = NULL;
|
|
+ const char *file;
|
|
+ GdkPixbuf *pixbuf, *mini;
|
|
+ AtkObject *a11y;
|
|
+ GtkTextView *view;
|
|
+ GtkTextBuffer *buffer;
|
|
+ GtkTargetEntry drag_types[] = {
|
|
+ { NULL, 0, 0 },
|
|
+ { "text/uri-list", 0, 1 },
|
|
+ };
|
|
+
|
|
+ /* FIXME: handle default shown case */
|
|
+ d(printf("adding attachment button/content for optional rendering\n"));
|
|
+
|
|
+ info = (struct _attach_puri *)em_format_find_puri((EMFormat *)efh, pobject->classid);
|
|
+ g_assert(info != NULL);
|
|
+ g_assert(info->forward == NULL);
|
|
+
|
|
+ scroll = gtk_scrolled_window_new (NULL, NULL);
|
|
+ mainbox = gtk_hbox_new(FALSE, 0);
|
|
+
|
|
+ button = gtk_button_new();
|
|
+ hbox = gtk_hbox_new (FALSE, 0);
|
|
+ img = e_icon_factory_get_image ("stock_show-all", E_ICON_SIZE_BUTTON);
|
|
+ label = gtk_label_new_with_mnemonic(_("View _Unformatted"));
|
|
+ g_object_set_data (button, "text-label", (gpointer)label);
|
|
+ gtk_box_pack_start ((GtkBox *)hbox, img, TRUE, TRUE, 2);
|
|
+ gtk_box_pack_start ((GtkBox *)hbox, label, TRUE, TRUE, 2);
|
|
+ gtk_widget_show_all (hbox);
|
|
+ gtk_container_add (button, hbox);
|
|
+ if (info->handle)
|
|
+ g_signal_connect(button, "clicked", G_CALLBACK(efhd_optional_button_show), scroll);
|
|
+ else {
|
|
+ gtk_widget_set_sensitive(button, FALSE);
|
|
+ GTK_WIDGET_UNSET_FLAGS(button, GTK_CAN_FOCUS);
|
|
+ }
|
|
+
|
|
+ vbox = gtk_vbox_new (FALSE, 0);
|
|
+ gtk_box_pack_start((GtkBox *)mainbox, button, FALSE, FALSE, 6);
|
|
+
|
|
+ button = gtk_button_new();
|
|
+ hbox = gtk_hbox_new (FALSE, 0);
|
|
+ img = e_icon_factory_get_image ("stock_open", E_ICON_SIZE_BUTTON);
|
|
+ label = gtk_label_new_with_mnemonic(_("O_pen With"));
|
|
+ gtk_box_pack_start ((GtkBox *)hbox, img, TRUE, TRUE, 2);
|
|
+ gtk_box_pack_start ((GtkBox *)hbox, label, TRUE, TRUE, 2);
|
|
+ gtk_box_pack_start ((GtkBox *)hbox, gtk_arrow_new(GTK_ARROW_DOWN, GTK_SHADOW_NONE), TRUE, TRUE, 2);
|
|
+ gtk_widget_show_all (hbox);
|
|
+ gtk_container_add (button, hbox);
|
|
+
|
|
+ a11y = gtk_widget_get_accessible (button);
|
|
+ atk_object_set_name (a11y, _("Attachment"));
|
|
+
|
|
+ g_signal_connect(button, "button_press_event", G_CALLBACK(efhd_attachment_popup), info);
|
|
+ g_signal_connect(button, "popup_menu", G_CALLBACK(efhd_attachment_popup_menu), info);
|
|
+ g_signal_connect(button, "clicked", G_CALLBACK(efhd_attachment_popup_menu), info);
|
|
+ gtk_box_pack_start((GtkBox *)mainbox, button, FALSE, FALSE, 6);
|
|
+
|
|
+ gtk_widget_show_all(mainbox);
|
|
+
|
|
+ gtk_box_pack_start((GtkBox *)vbox, mainbox, FALSE, FALSE, 6);
|
|
+
|
|
+ view = gtk_text_view_new ();
|
|
+ gtk_text_view_set_editable (view, FALSE);
|
|
+ gtk_text_view_set_cursor_visible (view, FALSE);
|
|
+ buffer = gtk_text_view_get_buffer(view);
|
|
+ gtk_text_buffer_set_text (buffer, info->mstream->buffer->data, info->mstream->buffer->len);
|
|
+ camel_object_unref(info->mstream);
|
|
+ info->mstream = NULL;
|
|
+ gtk_scrolled_window_set_policy (scroll, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
|
|
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scroll), GTK_SHADOW_IN);
|
|
+ gtk_container_add (scroll, view);
|
|
+ gtk_box_pack_start((GtkBox *)vbox, scroll, TRUE, TRUE, 6);
|
|
+ gtk_widget_show (view);
|
|
+ gtk_widget_set_size_request (scroll, ((GtkWidget *)efh->html)->allocation.width-48, 250);
|
|
+ g_signal_connect (scroll, "size_allocate", G_CALLBACK(efhd_resize), efh);
|
|
+ gtk_widget_show (scroll);
|
|
+
|
|
+ if (!info->shown)
|
|
+ gtk_widget_hide (scroll);
|
|
+
|
|
+ gtk_widget_show (vbox);
|
|
+ gtk_container_add((GtkContainer *)eb, vbox);
|
|
+ info->handle = NULL;
|
|
+
|
|
+ return TRUE;
|
|
+}
|
|
+
|
|
+static void
|
|
+efhd_format_optional(EMFormat *emf, CamelStream *fstream, CamelMimePart *part, CamelStream *mstream)
|
|
+{
|
|
+ char *classid, *text, *html;
|
|
+ struct _attach_puri *info;
|
|
+ CamelStream *stream = ((CamelStreamFilter *) fstream)->source;
|
|
+
|
|
+ classid = g_strdup_printf("optional%s", emf->part_id->str);
|
|
+ info = (struct _attach_puri *)em_format_add_puri(emf, sizeof(*info), classid, part, efhd_attachment_frame);
|
|
+ em_format_html_add_pobject((EMFormatHTML *)emf, sizeof(EMFormatHTMLPObject), classid, part, efhd_attachment_optional);
|
|
+ info->handle = em_format_find_handler(emf, "text/plain");;
|
|
+ info->shown = FALSE;
|
|
+ info->snoop_mime_type = g_strdup("text/plain");
|
|
+ info->attachment = e_attachment_new_from_mime_part (info->puri.part);
|
|
+ info->mstream = mstream;
|
|
+ if (emf->valid) {
|
|
+ info->sign = emf->valid->sign.status;
|
|
+ info->encrypt = emf->valid->encrypt.status;
|
|
+ }
|
|
+
|
|
+ camel_stream_write_string(stream,
|
|
+ EM_FORMAT_HTML_VPAD
|
|
+ "<table cellspacing=0 cellpadding=0><tr><td><h3><font size=-1 color=red>");
|
|
+
|
|
+ html = camel_text_to_html(_("Evolution cannot render this email as it is too large to handle. You can view it unformatted or with an external text editor."), ((EMFormatHTML *)emf)->text_html_flags & CAMEL_MIME_FILTER_TOHTML_CONVERT_URLS, 0);
|
|
+ camel_stream_write_string(stream, html);
|
|
+ camel_stream_write_string(stream,
|
|
+ "</font></h3></td></tr></table>\n");
|
|
+ camel_stream_write_string(stream,
|
|
+ "<table cellspacing=0 cellpadding=0>"
|
|
+ "<tr>");
|
|
+ camel_stream_printf(stream, "<td><object classid=\"%s\"></object></td></tr></table>", classid);
|
|
+
|
|
+ g_free(html);
|
|
+
|
|
+ camel_stream_write_string(stream,
|
|
+/* "</font></h2></td></tr></table>\n" */
|
|
+ EM_FORMAT_HTML_VPAD);
|
|
+
|
|
+ g_free(classid);
|
|
+}
|
|
Index: mail/em-mailer-prefs.c
|
|
===================================================================
|
|
--- mail/em-mailer-prefs.c.orig
|
|
+++ mail/em-mailer-prefs.c
|
|
@@ -469,6 +469,16 @@ mlimit_count_changed (GtkSpinButton *spi
|
|
}
|
|
|
|
static void
|
|
+mlimit_count_changed (GtkSpinButton *spin, EMMailerPrefs *prefs)
|
|
+{
|
|
+ int count;
|
|
+
|
|
+ count = (int) gtk_spin_button_get_value (prefs->mlimit_count);
|
|
+
|
|
+ gconf_client_set_int (prefs->gconf, "/apps/evolution/mail/display/message_text_part_limit", count, NULL);
|
|
+}
|
|
+
|
|
+static void
|
|
spin_button_init (EMMailerPrefs *prefs, GtkSpinButton *spin, const char *key, float div, GCallback value_changed)
|
|
{
|
|
GError *err = NULL;
|
|
Index: mail/evolution-mail.schemas.in.in
|
|
===================================================================
|
|
--- mail/evolution-mail.schemas.in.in.orig
|
|
+++ mail/evolution-mail.schemas.in.in
|
|
@@ -529,7 +529,36 @@
|
|
</long>
|
|
</locale>
|
|
</schema>
|
|
-
|
|
+
|
|
+ <schema>
|
|
+ <key>/schemas/apps/evolution/mail/display/force_message_limit</key>
|
|
+ <applyto>/apps/evolution/mail/display/force_message_limit</applyto>
|
|
+ <owner>evolution-mail</owner>
|
|
+ <type>bool</type>
|
|
+ <default>true</default>
|
|
+ <locale name="C">
|
|
+ <short>Allows evolution to display text part of limited size</short>
|
|
+ <long>
|
|
+ Enable to render message text part of limited size.
|
|
+ </long>
|
|
+ </locale>
|
|
+ </schema>
|
|
+
|
|
+ <schema>
|
|
+ <key>/schemas/apps/evolution/mail/display/message_text_part_limit</key>
|
|
+ <applyto>/apps/evolution/mail/display/message_text_part_limit</applyto>
|
|
+ <owner>evolution-mail</owner>
|
|
+ <type>int</type>
|
|
+ <default>4096</default>
|
|
+ <locale name="C">
|
|
+ <short>Text message part limit</short>
|
|
+ <long>
|
|
+ This decides the max size of the text part that can be formatted under
|
|
+ evolution. The default is 4MB / 4096 KB and is specified interms of KB.
|
|
+ </long>
|
|
+ </locale>
|
|
+ </schema>
|
|
+
|
|
<schema>
|
|
<key>/schemas/apps/evolution/mail/display/thread_subject</key>
|
|
<applyto>/apps/evolution/mail/display/thread_subject</applyto>
|
|
Index: mail/mail-config.c
|
|
===================================================================
|
|
--- mail/mail-config.c.orig
|
|
+++ mail/mail-config.c
|
|
@@ -358,6 +358,20 @@ gconf_mlimit_changed (GConfClient *clien
|
|
}
|
|
|
|
static void
|
|
+gconf_mlimit_size_changed (GConfClient *client, guint cnxn_id,
|
|
+ GConfEntry *entry, gpointer user_data)
|
|
+{
|
|
+ config->mlimit_size = gconf_client_get_int (config->gconf, "/apps/evolution/mail/display/message_text_part_limit", NULL);
|
|
+}
|
|
+
|
|
+static void
|
|
+gconf_mlimit_changed (GConfClient *client, guint cnxn_id,
|
|
+ GConfEntry *entry, gpointer user_data)
|
|
+{
|
|
+ config->mlimit = gconf_client_get_bool (config->gconf, "/apps/evolution/mail/display/force_message_limit", NULL);
|
|
+}
|
|
+
|
|
+static void
|
|
gconf_mime_types_changed (GConfClient *client, guint cnxn_id,
|
|
GConfEntry *entry, gpointer user_data)
|
|
{
|
|
@@ -572,6 +586,15 @@ mail_config_get_message_limit (void)
|
|
return config->mlimit_size;
|
|
}
|
|
|
|
+int
|
|
+mail_config_get_message_limit (void)
|
|
+{
|
|
+ if (!config->mlimit)
|
|
+ return -1;
|
|
+
|
|
+ return config->mlimit_size;
|
|
+}
|
|
+
|
|
const char *
|
|
mail_config_get_label_color_by_name (const char *name)
|
|
{
|
|
Index: mail/mail-config.glade
|
|
===================================================================
|
|
--- mail/mail-config.glade.orig
|
|
+++ mail/mail-config.glade
|
|
@@ -5038,6 +5038,82 @@ For example: "Work" or "P
|
|
</child>
|
|
|
|
<child>
|
|
+ <widget class="GtkHBox" id="hbox234">
|
|
+ <property name="visible">True</property>
|
|
+ <property name="homogeneous">False</property>
|
|
+ <property name="spacing">4</property>
|
|
+
|
|
+ <child>
|
|
+ <widget class="GtkCheckButton" id="mlimit_checkbutton">
|
|
+ <property name="visible">True</property>
|
|
+ <property name="can_focus">True</property>
|
|
+ <property name="label" translatable="yes">Do not format text contents in mails if the text si_ze exceeds</property>
|
|
+ <property name="use_underline">True</property>
|
|
+ <property name="relief">GTK_RELIEF_NORMAL</property>
|
|
+ <property name="focus_on_click">True</property>
|
|
+ <property name="active">False</property>
|
|
+ <property name="inconsistent">False</property>
|
|
+ <property name="draw_indicator">True</property>
|
|
+ </widget>
|
|
+ <packing>
|
|
+ <property name="padding">0</property>
|
|
+ <property name="expand">False</property>
|
|
+ <property name="fill">False</property>
|
|
+ </packing>
|
|
+ </child>
|
|
+
|
|
+ <child>
|
|
+ <widget class="GtkSpinButton" id="mlimit_spin">
|
|
+ <property name="visible">True</property>
|
|
+ <property name="can_focus">True</property>
|
|
+ <property name="climb_rate">1</property>
|
|
+ <property name="digits">0</property>
|
|
+ <property name="numeric">False</property>
|
|
+ <property name="update_policy">GTK_UPDATE_ALWAYS</property>
|
|
+ <property name="snap_to_ticks">False</property>
|
|
+ <property name="wrap">False</property>
|
|
+ <property name="adjustment">0 0 30000 1 10 10</property>
|
|
+ </widget>
|
|
+ <packing>
|
|
+ <property name="padding">0</property>
|
|
+ <property name="expand">False</property>
|
|
+ <property name="fill">True</property>
|
|
+ </packing>
|
|
+ </child>
|
|
+
|
|
+ <child>
|
|
+ <widget class="GtkLabel" id="label585">
|
|
+ <property name="visible">True</property>
|
|
+ <property name="label" translatable="yes">KB</property>
|
|
+ <property name="use_underline">False</property>
|
|
+ <property name="use_markup">False</property>
|
|
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
|
|
+ <property name="wrap">False</property>
|
|
+ <property name="selectable">False</property>
|
|
+ <property name="xalign">0.5</property>
|
|
+ <property name="yalign">0.5</property>
|
|
+ <property name="xpad">0</property>
|
|
+ <property name="ypad">0</property>
|
|
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
|
+ <property name="width_chars">-1</property>
|
|
+ <property name="single_line_mode">False</property>
|
|
+ <property name="angle">0</property>
|
|
+ </widget>
|
|
+ <packing>
|
|
+ <property name="padding">0</property>
|
|
+ <property name="expand">False</property>
|
|
+ <property name="fill">False</property>
|
|
+ </packing>
|
|
+ </child>
|
|
+ </widget>
|
|
+ <packing>
|
|
+ <property name="padding">0</property>
|
|
+ <property name="expand">False</property>
|
|
+ <property name="fill">False</property>
|
|
+ </packing>
|
|
+ </child>
|
|
+
|
|
+ <child>
|
|
<widget class="GtkHBox" id="hbox233">
|
|
<property name="visible">True</property>
|
|
<property name="homogeneous">False</property>
|