For messages with a base MIME type of multipart/alternative, we were
hiding text/plain subparts based on the number of alternate subparts.
This assumption of course broke on a message with the following body
structure and a Plain Text Mode preference of "Show HTML if present":
multipart/alternative
text/plain
text/plain
Instead, note when we've actually seen a text/html subpart and use that
to decide whether to hide the text/plain parts.
This splits the print dialog's "Headers" tab into a separate widget.
EMailPrintConfigHeaders takes an EMailPartHeaders and displays its print
model, which is a representation of all message headers (except subject)
with an on/off flag for each. The headers can be toggled and reordered,
and the changes are written back to the print model.
During printing, EMailFormatterPrintHeaders uses the same print model
to determine which headers to show and in what order (except subject).
This approach is much saner than the old method, which was trying to
manipulate WebKitWebView DOM directly to toggle and reorder headers.
This approach also happens to work, whereas the old method did not.
Returns a GtkTreeModel of header names and values and visibility flags,
built from the CamelMimeMessage. The tree model rows can be reordered
and toggled prior to printing.
Also add e_mail_part_headers_is_default() as a handy helper.
This will replace the headers API in EMailFormatter. Need a more
permanent place for headers since EMailFormatter is too disposable.
Also add an ESettingsMailPartHeaders class, which binds the new property
to the "show-headers" setting with a suitable mapping function to filter
out disabled header names.
Split the _camel_header_raw struct parameter into separate "header_name"
and "header_value" string parameters, which is all the function actually
needs to work.
This is a weak reference to the EMailPartList to which the EMailPart
has been added. The property is set by e_mail_part_list_add_part().
New functions:
e_mail_part_ref_part_list()
e_mail_part_set_part_list()
Replaces the "headers" key. Whereas "headers" is an array of XML
blobs, the "show-headers" key is an array of string/boolean pairs.
Also update the appropriate places to get/set the new key.
Mainly to avoid accessing GSettings directly from EMailBrowser.
Also add a "browser-close-on-reply-policy" GSettings key that replaces
"prompt-on-reply-close-browser", the difference being the new key uses
an enum definition compatible with EAutomaticActionPolicy instead of a
free-form string value.
And finally add an ESettingsMailBrowser class to glue things together.
Empty group addresses were left as-is when sending an email directly,
not through Outbox, which could cause a send error through SMTP.
Expanding group addresses, or removing empty groups, from a list
or recipients before sending the message fixes the issue.
These are just Express Mode leftovers.
Also remove obsolete functions:
e_mail_reader_get_enable_show_folder()
e_mail_reader_enable_show_folder()
e_mail_paned_view_set_enable_show_folder()
EMailReader is an interface and should not know about specific classes
that implement its interface. Instead, EMailBrowser itself will prompt
in response to "composer-created" signals that include a source message.
This also removes the "destroy_when_done" parameter from
em_utils_forward_messages() since it's no longer needed.
Emitted to indicate a composer window was created in response to a user
action on the EMailReader. Examples of such actions include replying,
forwarding, and starting a new message.
If applicable, the source message (i.e. the message being replied to or
forwarded) is included in the signal emission.
New functions:
e_mail_reader_composer_created()