Assumed that getting a TreeModel iterator would always work isn't true
at shudown when the model is being depopulated. This removes
assertion and only proceeds when valid every time.
The logic in our image replacement code needed to take account if the
MIME part was inside a multipart/mixed container or otherwise. This
patch does that as well as clean up the code path and better document
the API as well as what's going on inside ConversationViewer when the
message is assembled.
Removing internal and private symbols from geary-static.vapi results
in removing 1,000 lines from the file. Although testing doesn't show
an appreciable increase in compile time (w/ make -j8 on my 8-core
machine), by reducing symbol leakage partial builds should improve.
This patch also fixes a couple of symbols marked internal but being
used publicly (and necessarily so) and a couple of errordomains in
the Engine not placed in the Geary namespace.
For now, the undo stack is 1-deep with no redo facility, which mimics
Gmail's facility. We can consider later offering a more involved
undo stack, but would like to try this out for now and work out the
kinks before becoming more aggressive.
Although this doesn't solve the problems described in the bug, there
was some perceived improvement in reducing the occurrence. These
changes also clean up the code, being verbose about distinguishing
between sorting by sent date (i.e. the Date: header field) and
received date (i.e. in EmailProperties, i.e. IMAP's INTERNALDATE).
There was one comparator that did not have a proper stabilizer; that's
fixed here as well.
This allows us to avoid messing with the state of the conversation
viewer when we're composing a new message. Instead, we hide it
completely and show only the ComposerBox.
The styling of paned composer is changed to resemble that of the inline
composers. Because of restrictions on what styles are available for
various widgets, the ComposerBox becomes a Gtk.Frame, and its border
simulates the margin while some padding and an inset shadow simulate the
border. I haven't figured out how to do an outset box-shadow.
https://bugzilla.gnome.org/show_bug.cgi?id=743670
We search for HTML-like tags in signatures, and don't do much as much
escaping if we find one. For .signature files detected to be HTML, we
insert them without any change. User-entered signatures get their
whitespace protected, even when HTML is detected. The existing code for
preserving whitespace doesn't work when there's already HTML code in the
text (it converts "<a b>" to "<a b>"), so instead we preserve the
whitespace with CSS.
A preview of the signature is added to the the UI. There's a TextView
and a WebView in a Stack, and we swap between them with a StackSwitcher.
Some of the packing details are changed so that these views are the
thing that expands when the dialog size changes.
https://bugzilla.gnome.org/show_bug.cgi?id=738895
When messages have been appended and removed from a folder, Geary has
no choice but to do a full UID scan of the server to figure out
exactly what's changed. Prior code use a FETCH command, but SEARCH is
a better choice because there's less overhead in a SEARCH result: only
the UIDs are returned and they may be returned in a single line or in
batches. Also, there's no reason to return those results in a sorted
set, which was driving up transaction time, so an unsorted set is
returned.
On my account, a full normalization of All Mail went from 8s to 1s
with this change.
Selection change processing is now done in idle handler by
ConversationListView to allow for back-to-back selection changes to be
processed one time only, as well as to allow for ConversationMonitor
signals to be handled in any order (by ConversationListStore and
others).
When certain punctuation marks are found in a search term (i.e. an
extended name, or with an email address), treat the search as an
exact-term search to remove spurious search results.
The App.ConversationMonitor would blacklist the current folder when
searching for email related to a conversation. Earlier searching for
related emails returned SearchEmailIdentifiers and there was a
question about determining equivalence with ImapDB.EmailIdentifiers.
However, that's no longer the case (Message-ID searching returnes
ImapDB.EmailIdentifiers), so searching within the current folder is
not a problem.
This means that constructing conversations where very old messages are
in the current folder -- for example, All Mail -- will be loaded
without expanding the window to load all email in the span.
This is only allowed when quoting the entire message, no keystrokes have
been made, and the cursor has not been moved. To ensure this last, we
watch editor.selection_changed, but only after we've set the body up.
A note is added to the label in the composer toolbar when this is
active. This was previously called the draft_save_text, but we rename
it here to reflect the current usage.
The quote is deleted by clearing the message entirely, and then
recreating the initial state. This caused critical errors in
update_actions(), so we now check for the selection being null before
proceeding.
https://bugzilla.gnome.org/show_bug.cgi?id=741609