| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
| |
EMailPrintConfigHeaders is pretty simple now that we delegate most
of the meat and potatoes tree view handling to our new parent class.
|
|
|
|
|
|
|
|
|
|
|
|
| |
ETreeViewFrame embeds a GtkTreeView in a scrolled window and adds an
inline-style toolbar beneath the scrolled window which can be hidden.
The inline-style toolbar supports "add" and "remove" actions, as well
as move actions if the tree view is reorderable and selection actions
if the tree view supports multiple selections. The action set can be
extended through e_tree_view_frame_insert_toolbar_action().
This also adds a small demo program: test-tree-view-frame
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
Set an urgency hint on dialog's parent, or dialog itself, when it has
no parent, to get user's attention to the dialog. For example, when
there is a changed mail composer window on a different workspace than
evolution's main window and user invokes quit by File->Quit in evolution,
then the window is waiting for a response on the composer, but there
was no hint it's waiting for anything.
|
| |
|
|
|
|
|
|
|
| |
Skip leading whitespace and hand the rest to g_uri_parse_scheme().
If that can identify a scheme then make the open button sensitive.
(Have to be careful to skip leading whitespace when opening, too.)
|
|
|
|
|
|
|
|
| |
Replace the big, bulky "open URL" button with a clickable icon directly
in the text entry field. This saves precious vertical space, especially
in the contact editor.
Also remove e_url_entry_get_entry() since EUrlEntry now IS a GtkEntry.
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
| |
management" guides
This avoids having ten undistinguishable links to with exactly the same names in the 'More Information' section at the bottom of the Yelp help browser for all those Account Management topic pages. Instead they know mention which account type they specifically link to.
Thanks to Kat and Shaun for the help.
|
| |
|
|
|
|
| |
so you don't only see 'IMAP' as link title at the bottom of the 'IMAP Subscriptions' page
|
| |
|
| |
|
| |
|
|
|
|
| |
Inline link elements do not have a type attribute.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
written in the file
|
|
|
|
|
|
|
|
| |
page.
The instructions per account are collapsed by default and expandable in clients that support ui: (like recent Yelp versions). This requires turning the <list> of account types on intro-first-run.page into <section>s as ui:expandable is not supported inside of <list> elements.
Embedding directly does not require users to follow "Click here for configuration instructions for this account" links anymore, that we get rid of "Click here to get to next step if you came from the First Run Wizard help page" sections at the bottom of each account type configuration page.
|
|
|
|
| |
descriptive
|
|
|
|
| |
types
|
| |
|
|
|
|
|
| |
The signal indicates the folder tree for a particular store needs to be
reconstructed. We do this by calling em_folder_tree_model_add_store().
|
| |
|
|
|
|
|
|
|
|
| |
Delay capturing MessageList state for a regen operation until the idle
callback, so the caller has a chance to configure the MessageList first.
Also, move the CamelFolderThread into the private structure and provide
thread-safe internal accessor functions for it.
|
| |
|
| |
|
|
|
|
|
| |
Give the "show-headers" key a proper default value, and watch out for
an empty "headers" key, which is supposed to imply that default value.
|
|
|
|
|
|
|
|
| |
The shortcuts Ctrl+C/V/X are used for whole calendar items
copy/paste/cut, not for text when editing event details inline, either
in a day/week view or in a list view. By tracking the is-editing property
of respective cell editor and using it when enabling/disabling clipboard
actions makes the respective text operations work as expected.
|
|
|
|
| |
ETree does not provide one anymore.
|
| |
|
| |
|
|
|
|
| |
directly in first-run page instead of making users click to go to 'Backup/Restore' page. Hey, it's 2013.
|
| |
|
| |
|
|
|
|
| |
calendar alarms page
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
Now that ETree no longer has an ESorter, this function is silly.
|
|
|
|
|
|
| |
ESorter itself does nothing useful, so there's no reason to create one.
ESorter should really be an interface.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
| |
Reducing API bloat. Do this instead:
adapter = e_tree_get_table_adapter (tree);
row_count = e_table_model_row_count (E_TABLE_MODEL (adapter));
|
|
|
|
|
|
|
| |
Reducing API bloat. Do this instead:
adapter = e_tree_get_table_adapter (tree);
e_tree_table_adapter_force_expanded_state (adapter, state);
|
|
|
|
|
|
|
| |
Reducing API bloat. Do this instead:
adapter = e_tree_get_table_adapter (tree);
e_tree_table_adapter_load_expanded_state_xml (adapter, xml);
|
|
|
|
|
|
|
| |
Reducing API bloat. Do this instead:
adapter = e_tree_get_table_adapter (tree);
xml = e_tree_table_adapter_save_expanded_state_xml (adapter);
|
|
|
|
|
|
|
| |
Reducing API bloat. Do this instead:
adapter = e_tree_get_table_adapter (tree);
e_tree_table_adapter_load_expanded_state (adapter, filename);
|
|
|
|
|
|
|
| |
Reducing API bloat. Do this instead:
adapter = e_tree_get_table_adapter (tree);
e_tree_table_adapter_save_expanded_state (adapter, filename);
|
|
|
|
|
|
|
| |
Reducing API bloat. Do this instead:
adapter = e_tree_get_table_adapter (tree);
e_tree_table_adapter_show_node (adapter, path);
|
|
|
|
|
|
|
| |
Reducing API bloat. Do this instead:
adapter = e_tree_get_table_adapter (tree);
visible = e_tree_table_adapter_root_node_is_visible (adapter);
|
|
|
|
|
|
|
| |
Reducing API bloat. Do this instead:
adapter = e_tree_get_table_adapter (tree);
row = e_tree_table_adapter_row_of_node (adapter, path);
|
|
|
|
|
|
|
| |
Reducing API bloat. Do this instead:
adapter = e_tree_get_table_adapter (tree);
path = e_tree_table_adapter_node_at_row (adapter, row);
|
|
|
|
|
|
|
| |
Reducing API bloat. Do this instead:
adapter = e_tree_get_table_adapter (tree);
e_tree_table_adapter_root_node_set_visible (adapter, visible);
|
|
|
|
|
|
|
| |
Reducing API bloat. Do this instead:
adapter = e_tree_get_table_adapter (tree);
e_tree_table_adapter_node_set_expanded_recurse (adapter, path, expanded);
|
|
|
|
|
|
|
| |
Reducing API bloat. Do this instead:
adapter = e_tree_get_table_adapter (tree);
e_tree_table_adapter_node_set_expanded (adapter, path, expanded);
|
|
|
|
|
|
|
| |
Reducing API bloat. Do this instead:
adapter = e_tree_get_table_adapter (tree);
expanded = e_tree_table_adapter_node_is_expanded (adapter, path);
|
| |
|
| |
|
| |
|
|
|
|
| |
It just calls gtk_drag_get_data() anyway.
|
|
|
|
| |
It just calls gtk_drag_dest_unset() anyway.
|
|
|
|
| |
It just calls gtk_drag_dest_set_proxy() anyway.
|
|
|
|
| |
Reducing API bloat. Call gtk_drag_dest_set() directly instead.
|
|
|
|
|
|
|
| |
Reducing API bloat. Do this instead:
selection = (ETreeSelectionModel *) e_tree_get_selection_model (tree);
e_tree_selection_model_foreach (selection, callback, closure);
|
|
|
|
|
|
|
| |
Reducing API bloat. Do this instead:
selection = (ESelectionModel *) e_tree_get_selection_model (tree);
e_selection_model_foreach (selection, callback, closure);
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
Returns the total number of nodes in the tree model, including hidden
nodes in collapsed tree branches.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This replaces e_tree_table_adapter_construct() with construct properties
and overrides GObjectClass.constructed() to finish instance construction.
New functions:
e_tree_table_adapter_get_source_model()
Removed functions:
e_tree_table_adapter_construct()
|
|
|
|
| |
Similar to what was recently done to ETreeModel.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This reworks the MessageList regen scheduling to be a little more
intuitive, at least to me. We now set the RegenData immediately, but
start the actual regen operation from an idle callback. That way the
caller has the remainder of this main loop iteration to make further
MessageList changes without triggering additional regens.
I think what was happening before was we were triggering multiple regen
operations as we were configuring the EMailBrowser, with each new regen
cancelling the previous, and the message UID to select wound up getting
paired with one of the cancelled regen operations. This resulted in no
message UID ever getting selected in the EMailBrowser.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
It always returned FALSE.
|
|
|
|
| |
Was never called.
|
|
|
|
| |
It always returned TRUE.
|
|
|
|
| |
It always returned TRUE.
|
|
|
|
| |
It always returned NULL.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This commit does a number of things which I could not subdivide into
smaller commits.
* Converts ETreeModel to an interface, implemented by MessageList.
* Drops ETreeMemory and ETreeMemoryCallbacks, which were ETreeModel
subclasses. Their functionality is subsumed by MessageList.
* MessageList drops its public ETreeModel pointer, since MessageList
now implements ETreeModel as an interface.
* Adds message_list_set_expanded_default(), which takes over for
e_tree_memory_set_expanded_default().
|
|
|
|
|
|
| |
Replaces e_tree_memory_get_children().
The "paths" output parameter was unused, and was a bad idea anyway.
|
|
|
|
| |
Instead of reinventing GNode, use GNode.
|
|
|
|
| |
ETreeMemory does not implement this, so it's always FALSE.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
It's always TRUE.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
No longer used. We actually had this defined in two places.
|
|
|
|
| |
No longer used.
|
| |
|
|
|
|
|
|
| |
The returned UID array now has a built-in "free" function for its
elements and should be released by callers with g_ptr_array_unref()
rather than em_utils_uids_free() or some equivalent.
|
| |
|
| |
|
| |
|
|
|
|
| |
Replaces e_mail_reader_get_folder().
|
|
|
|
|
|
|
|
|
| |
Bind this to EMailReader's "group-by-threads" property.
New functions:
message_list_get_group_by_threads()
message_list_set_group_by_threads()
|
|
|
|
|
|
|
|
|
| |
Add internal functions to compute these as needed based on a given
CamelFolder.
Removed functions:
message_list_set_hidedeleted()
|
|
|
|
|
|
|
|
|
| |
Bind this to the "show-deleted" GSettings key.
New functions:
message_list_get_show_deleted()
message_list_set_show_deleted()
|
|
|
|
|
|
|
|
| |
Also move the CamelFolder pointer into the private structure.
New functions:
message_list_ref_folder()
|
|
|
|
| |
Bind this to the "thread-latest" GSettings key.
|
| |
|
|
|
|
| |
Bind this to the "thread-subject" GSettings key.
|
|
|
|
|
|
| |
Also add a placeholder ESettingsMessageList extension. Going to clean
out some of the direct GSettings usage in MessageList by adding GObject
properties and binding them to GSettings keys from the extension.
|
|
|
|
| |
No longer used. Always nice to remove a dirty hack on a dirty hack.
|
| |
|
|
|
|
|
|
|
| |
Make sure we're using our own RegenData structure. Still clear the
reference on the private structure if it matches what we get from our
GSimpleAsyncResult. The idea is to ensure we have exclusive access to
it so we don't have to worry about locking, etc.
|
| |
|
|
|
|
| |
Whatever those macros were once used for was surely evil.
|
|
|
|
| |
No longer used. Looks like a relic of some nasty hack.
|
|
|
|
|
| |
Reimplement the function to use an EActivity and GSimpleAsyncResult
instead of the legacy async framework in mail-mt.c.
|
| |
|
|
|
|
|
|
| |
BROKEN_ETREE is defined and SMART_ADDRESS_COMPARE is not defined.
That's not going to change, so remove the dead conditional code.
Also remove "#if 0" chunks that lack a comment explaining why.
|
| |
|
| |
|
|
|
|
|
|
| |
This is another source of crashes after creating and destroying a second
shell window. The signal handler was left connected with the destroyed
shell window as the closure.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This fixes a bug in the old implementation where the application could
crash after a second shell window was created and destroyed, because a
signal handler with the destroyed shell window as the closure was left
connected.
But moreover this simplifies the implementation by using a property
binding plus transform function instead of juggling signal handlers,
and also adds code comments where things get a little tricky.
Removed (now unused) functions:
e_shell_window_get_toolbar_new_prefer_item
e_shell_window_set_toolbar_new_prefer_item
|
| |
|
|
|
|
|
|
|
|
|
| |
Call e_source_selector_update_all_rows() after connecting to the
selector tree model's "row-changed" signal. This will ensure the
appropriate ECalClients get loaded into the ECalModel.
This fixes the bug where opening a second Tasks window shows no
content until one of the sidebar items is fiddled with.
|
|
|
|
|
|
|
|
|
| |
Call e_source_selector_update_all_rows() after connecting to the
selector tree model's "row-changed" signal. This will ensure the
appropriate ECalClients get loaded into the ECalModel.
This fixes the bug where opening a second Memos window shows no
content until one of the sidebar items is fiddled with.
|
|
|
|
|
|
|
|
|
| |
Call e_source_selector_update_all_rows() after connecting to the
selector tree model's "row-changed" signal. This will ensure the
appropriate ECalClients get loaded into the ECalModel.
This fixes the bug where opening a second Calendar window shows no
content until one of the sidebar items is fiddled with.
|
|
|
|
|
| |
Calls e_source_selector_update_row() for each ESource being shown
by the ESourceSelector, according to the "extension-name" property.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
| |
Use the EMailPartHeaders API instead.
|
|
|
|
|
| |
Use e_mail_part_headers_dup_default_headers() to extract specific
headers to show in the desired order.
|
|
|
|
|
| |
Use e_mail_part_headers_dup_default_headers() to extract specific
headers to show in the desired order.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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()
|
|
|
|
|
|
|
|
|
|
| |
No longer used.
Also remove related helper functions:
e_mail_reader_header_from_xml()
e_mail_reader_header_to_xml()
e_mail_reader_header_free()
|
|
|
|
|
|
|
| |
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.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
Pop-up dialog is far too intrusive. Instead ask the question as an
inline alert in the message window, which does not interrupt the user.
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
| |
|
| |
|
|
|
|
| |
To have a proper GEnumClass registered for ask/always/never choices.
|
| |
|
|
|
|
|
|
|
| |
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()
|
|
|
|
| |
This is just an Express Mode leftover.
|
|
|
|
| |
Replaces em_utils_forward_messages().
|
|
|
|
| |
Replaces em_utils_edit_messages().
|
|
|
|
|
|
|
|
|
| |
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()
|
| |
|
| |
|
| |
|
|
|
|
|
| |
Replace the EShell and CamelSession arguments with a single EMailBackend
argument, from which both the EShell and CamelSession can be obtained.
|
| |
|
|
|
|
|
|
|
| |
These functions do not exist:
e_mail_reader_get_formatter()
e_mail_reader_set_formatter()
|
| |
|
|
|
|
|
|
| |
Convenience function that works like e_source_registry_ref_source(),
but spares the caller from digging out the ESourceRegistry from the
header table.
|
|
|
|
|
|
|
|
| |
No longer needed.
Removed functions:
e_composer_header_table_get_shell()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The ESourceRegistry can still be obtained from the EClientCache:
client_cache = e_composer_header_table_ref_client_cache (table);
registry = e_client_cache_ref_registry (client_cache);
...
g_object_unref (client_cache);
g_object_unref (registry);
Added functions:
e_composer_header_table_ref_client_cache()
Removed functions:
e_composer_header_table_get_registry()
|
| |
|
|
|
|
|
|
| |
Call e_task_shell_sidebar_add_client() instead of add_source().
No point asynchronously obtaining the client if we already have it.
|
|
|
|
|
|
| |
Call e_memo_shell_sidebar_add_client() instead of add_source().
No point asynchronously obtaining the client if we already have it.
|
|
|
|
|
|
| |
Call e_cal_shell_sidebar_add_client() instead of add_source().
No point asynchronously obtaining the client if we already have it.
|
|
|
|
|
|
|
|
| |
The function now returns TRUE if the ECalClient was actually removed
from the model, or FALSE if the model did not have the ECalClient.
Use this to avoid an unnecessary gnome_calendar_update_query() call
in cal_shell_view_selector_client_removed().
|
|
|
|
|
|
|
|
| |
The function now returns TRUE if the ECalClient was actually added
to the model, or FALSE if the model already had the ECalClient.
Use this to avoid an unnecessary gnome_calendar_update_query() call
in cal_shell_view_selector_client_added_cb().
|
| |
|
| |
|
|
|
|
| |
No longer needed.
|
|
|
|
|
|
|
|
|
|
| |
Obtain calendar views asynchronously and concurrently, and update the
task and memo pads synchronously (they don't block as best I can tell).
Get rid of the whole thread-pool message dispatching thing, which I
think I myself wrote years ago (calendar had no async API back then).
Consequently I'm seeing calendar events show up noticably quicker.
|
| |
|
| |
|
|
|
|
|
|
| |
Some cards can have two PINs, one 'global' and one 'application'.
NSS provides which token is required, but Evolution didn't show
that information to a user.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Making EAlertDialog non-resizable is the only way at present for GTK+ to
pick a resonable default size, otherwise we get alerts looking like this:
https://bugzilla.gnome.org/attachment.cgi?id=221303
See https://bugzilla.gnome.org/681937 for details.
Also drop the default window size hack in alert_dialog_constructed().
|
|
|
|
|
|
|
| |
If sending fails for any reason, return a suitable GError. Don't just
return silently. Also check for a wider range of errors indicating the
service is unavailable in composer_send_completed(). This will trigger
the "save-to-outbox" info alert.
|
|
|
|
|
| |
We don't show an icon for other mailers, and the tiny 16x16 pixel
icon looks stupid next to the much larger contact/gravatar image.
|
|
|
|
|
| |
Remove a ClientData entry on "source-removed" or "source-disabled"
signals from the ESourceRegistry.
|