| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
So subclasses can safely chain up without checking for NULL.
|
| |
|
|
|
|
|
|
|
|
| |
Apparently the migration logic was more complex than it needed to be.
The old numeric key was already synced to the EMailReplyStyle enum in
the source code. Dunno where I got the idea it wasn't.
Just more evidence numeric enum keys are bad.
|
|
|
|
|
| |
Directly indicate the signal ID to be emitted from the update callback
instead of playing silly games with boolean flags.
|
|
|
|
|
|
|
|
|
|
| |
* Stop using recursive mutexes.
* Give StoreInfo a reference count.
* Give FolderInfo a reference count.
* Track CamelFolders with GWeakRef instead of weak pointers.
* Submit updates directly to the GMainContext, like we do in EDS,
instead of dequeuing them all from a single idle callback that
we then have to track.
|
|
|
|
|
| |
The "stores" hash table is created on instance init and destroyed with
the cache itself. It is never NULL during MailFolderCache's lifetime.
|
|
|
|
|
|
|
|
| |
Take a CamelStore and folder name instead of a CamelFolder.
CamelStore and folder name can easily be obtained from either a folder
URI or a CamelFolder instance, and the function is more efficient with
separate parameters.
|
|
|
|
|
|
|
|
| |
Replaces mail_folder_cache_get_folder_from_uri().
Returns the CamelFolder for the CamelStore and folder name if available,
or else NULL if a CamelFolder instance is not yet cached. This function
does not block.
|
|
|
|
|
|
|
|
|
| |
Returns whether MailFolderCache has information about the folder
described by the CamelStore and folder name. This does not necessarily
mean it has the CamelFolder instance, but it at least has some meta-data
about it.
You can use this function as a folder existence test.
|
|
|
|
|
|
| |
New functions:
mail_folder_cache_ref_main_context()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
I considered replacing the "session" property with a "registry"
property, but that just complicates application startup even more.
Fact is, if we have a CamelStore then we can get the CamelSession
and even the ESourceRegistry from it. Kinda dirty, but works.
It goes a little something like this...
camel_service = CAMEL_SERVICE (camel_store);
camel_session = camel_service_get_session (camel_service);
mail_session = E_MAIL_SESSION (camel_session);
registry = e_mail_session_get_registry (mail_session);
Removed functions:
mail_folder_cache_get_session()
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
I've got UI freeze in a call of e_book_client_view_stop() on contact
store dispose, caused by synchronous D-Bus call. Doing the call
in a dedicated thread makes no UI freeze here.
|
| |
|
| |
|
|
|
|
|
| |
We were leaking the EActivity. Wonder if this is the mystery activity
that's been blocking application shutdown lately.
|
|
|
|
| |
No longer used.
|
|
|
|
|
|
|
|
| |
We were using g_object_get() to write an "unsigned int" value (at least
32 bits) into a 16-bit integer address.
Don't know why we were bothering with g_object_get() in the first place,
just call camel_network_settings_get_port() instead.
|
|
|
|
|
|
|
| |
A resize abort of an event's end time in a day view didn't restore
original event size, because the drawing function updated event's
structure, when it should not. The resize of a start time could be
aborted without any problem.
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
My previous patch didn't go far enough to repair an already-corrupted
"show-headers" key. Need to actually reset it to its default value if
the "headers" key is empty.
|
|
|
|
|
| |
The list of minicards in reflow is populated on demand, and this was
a place where the demand was not satisfied, if it was missing.
|
|
|
|
|
|
| |
Unfinished undo framework from ages past.
Nice idea I guess, but not worth the complexity.
|
|
|
|
|
|
|
|
|
|
| |
Simo Sorce sent me an interesting case where the MIME type of the
message itself was image/gif, but the image was not being shown.
If the EMailPart representing the message body is marked as an
attachment, wrap it as such so it gets added to the attachment
bar but also set the "force_inline" flag since it doesn't make
sense to collapse the message body if we can render it. */
|
|
|
|
|
|
|
|
| |
nautilus-sendto has been stripped of its usefulness in GNOME 3.8.
It no longer has a UI of its own, it just immediately spawns a mail
client with a set of files as attachment arguments for a new message.
There's no reason for Evolution to be invoking it anymore.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
SpamAssassin is clearly not intended for use by mail clients, as
evidenced by the number of backflips Evolution's SA module still has to
do just to detect the presence and nature of a running spamd (a problem
which D-Bus solved a decade ago), and recent SA developer comments.
In lieu of removing SA support entirely, remove all the crazy GSettings
that are (thankfully) not exposed in the UI and relegate Evolution's SA
integration to only the most basic usage (spamassassin / sa-learn).
Users are better off with Bogofilter anyway. Leave SpamAssassin for
mail servers.
|
|
|
|
|
|
|
|
| |
Nudging EPlugin closer to full removal.
Nothing in Evolution uses this anymore and 3rd-party plugins should be
using EShell's "event::ready-to-start" signal or else GApplication's
"startup" signal.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
Declare the instance and class structs normally so Gtk-Doc can make
sense of it.
|
|
|
|
|
| |
Declare the instance and class structs normally so Gtk-Doc can make
sense of it.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Evolution is still occasionally getting stuck on shutdown, and although
the evolution-shell log domain shows debug messages for activities that
are preventing shutdown, they frequently look like this:
(evolution:13534): evolution-shell-DEBUG: 5 active 'mail' activities:
(evolution:13534): evolution-shell-DEBUG: * (no description)
(evolution:13534): evolution-shell-DEBUG: * (no description)
(evolution:13534): evolution-shell-DEBUG: * (no description)
(evolution:13534): evolution-shell-DEBUG: * (no description)
(evolution:13534): evolution-shell-DEBUG: * (no description)
I think the lack of descriptions is from CamelOperations popping all
their pushed messages, which is correct behavior but doesn't help us
debug the problem.
e_activity_get_last_known_text() returns the most recent _non-empty_
text value set on the EActivity. So our debug message can fall back
to that if the EActivity has no description at shutdown:
(evolution:13534): evolution-shell-DEBUG: * (was "blah, blah, blah")
|
|
|
|
| |
No longer used.
|
|
|
|
| |
No longer used.
|
|
|
|
| |
No longer used.
|
|
|
|
| |
No longer used.
|
|
|
|
|
|
|
|
|
|
|
| |
gal_view_collection_new() now takes system and user directory arguments
and loads GalViews during instance initialization.
Removed functions:
gal_view_collection_set_storage_directories()
gal_view_collection_load()
gal_view_collection_loaded()
|
|
|
|
|
|
|
|
| |
EShellView no longer needs help from subclasses other than getting
the needed GalView subclasses registered.
A nice side-effect of this is EShellView subclasses can now use the
G_DEFINE_DYNAMIC_TYPE macro.
|
|
|
|
|
|
| |
No longer needed. Instead, use g_type_ensure() to ensure the necessary
GalView subclasses are registered in the GType system before loading a
GalViewCollection. Best place to ensure types is from GClassInitFunc.
|
|
|
|
|
|
|
|
|
| |
Given a type code string from an XML file, find the appropriate GType by
traversing the GType hierarchy from GAL_TYPE_VIEW and checking the class
structures for a matching type code string.
This completely eliminates the need for what's left of GalViewFactory.
Now it's just a matter of cleaning up the remains.
|
| |
|
| |
|
|
|
|
|
|
| |
GalViewInstance and EMailPanedView need access. Currently they're just
using the public GalViewCollection members directly, but those are about
to be sealed up.
|
|
|
|
|
|
|
|
|
|
| |
Just readable for now, but I plan to make it also construct-only.
(Despite the precendence, I prefer "user" over "local" for the name.)
New functions:
gal_view_collection_get_user_directory()
|
|
|
|
|
|
|
|
| |
Just readable for now, but I plan to make it also construct-only.
New functions:
gal_view_collection_get_system_directory()
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
| |
It's set by EShellView but not actually used for anything.
Removed functions:
gal_view_collection_set_title()
|
|
|
|
|
|
| |
Removed functions:
gal_view_collection_display_view()
|
|
|
|
|
| |
GalViewFactory can now use its "gal_view_type" class member to
instantiate an appropriate GalView without help from subclasses.
|
|
|
|
|
| |
GalViewFactory can now use its "gal_view_type" class member to peek at
the appropriate GalViewClass and return its static "type_code" string.
|
|
|
|
|
|
|
| |
This is the GType of the GalView instances the factory creates.
Having this information will allow GalViewFactoryClass to do more itself
and be less reliant on subclasses.
|
|
|
|
|
| |
I suspect this will enable us to ditch GalViewFactory entirely once I
rework a few more things. We'll see though; one step at a time here.
|
|
|
|
|
|
| |
All GalView subclasses return a static string in their get_type_code()
methods, so replace the method with a static string pointer directly in
the class structure, and remove the "type-code" GalView property.
|
|
|
|
|
| |
It's better to have separate classes each with a fixed type code, than
one class with a variable type code. You'll see why in the next commit.
|
|
|
|
|
|
|
|
| |
No longer needed.
Removed functions:
gal_view_factory_etable_get_specification()
|
|
|
|
| |
Obtain the ETableState from the attached ETable or ETree as needed.
|
|
|
|
| |
No longer used.
|
|
|
|
|
|
|
| |
Instead, lazily load the state file once an ETable or ETree is attached,
since we need its ETableSpecification to create an ETableState instance.
This means GalViewFactoryEtable can lose its ETableSpecification too.
|
| |
|
|
|
|
|
| |
This replaces the get_title() and set_title() class methods, since
it's silly to defer to subclasses to track a simple string property.
|
| |
|
| |
|
|
|
|
|
|
|
|
| |
No longer used.
Removed functions:
gal_view_factory_get_title()
|
|
|
|
|
|
|
|
| |
No longer used.
Removed functions:
gal_view_edit()
|
|
|
|
| |
No longer user.
|
|
|
|
| |
No longer used.
|
|
|
|
| |
No longer used.
|
|
|
|
|
|
|
|
|
|
|
| |
The "Define Views" dialog is nearly useless. Replace it with a "Delete
Current View" menu item which is only visible for custom views that have
been explicitly saved under a new name.
There's actually no loss of functionality with this commit. Although
some view management tasks now require more clicks, view management in
general is a seldom-used feature and I doubt the dialog's absence will
even be noticed by users, much less missed.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
EShellView now holds a reference to the active GalViewInstance. Where
applicable, the EShellView subclass is responsible for keeping this up
to date when the sidebar selection changes.
Holding a reference allows EShellView to implement common actions like
"Save Current View" directly instead pushing it on to subclasses.
New functions:
e_shell_view_get_view_instance
e_shell_view_set_view_instance
|
| |
|
| |
|
|
|
|
|
| |
The e_shell_content_get_view_id() and e_shell_content_set_view_id()
header file declarations have no implementation.
|
| |
|
|
|
|
|
| |
Added a comment to the page about a link from Seahorse, so that the
seahorse help is suitably changed if this page is renamed/deleted.
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
e_table_specification_new() now takes a table specification filename and
a GError and parses the file as part of instance creation. If a file or
parse error occurs, e_table_specification_new() returns NULL.
This replaces e_table_specification_load_from_file().
New functions:
e_table_specification_get_filename()
Removed functions:
e_table_specification_load_from_file()
|
|
|
|
| |
No longer used.
|
|
|
|
| |
No longer used.
|
|
|
|
| |
No longer used.
|
|
|
|
| |
No longer used.
|
|
|
|
|
| |
Create our own ETableState and call e_table_state_load_from_string()
followed by e_tree_set_state_object().
|
|
|
|
|
| |
Use e_tree_get_state_object() and e_tree_set_state_object() instead to
transfer state info from one ETree instance to another.
|
|
|
|
|
|
| |
Use e_table_state_duplicate() and e_table_set_state_object().
Similarly for e_tree_set_state().
|
| |
|
| |
|
|
|
|
|
|
|
| |
No longer used outside of e-table-specification.c.
Its logic is merged into e_table_specification_load_from_file(), but
that too will be removed momentarily.
|
|
|
|
|
|
| |
Also remove e_tree_construct_from_spec_file().
Use e_tree_new() or e_tree_construct() instead.
|
|
|
|
|
|
| |
Also remove e_table_construct_from_spec_file().
Use e_table_new() or e_table_construct() instead.
|
|
|
|
|
| |
Creating an ETableSpecification is failable, so it's now up to the
caller to do that and handle errors before calling e_tree_new().
|
|
|
|
|
| |
Creating an ETableSpecification is failable, so it's now up to the
caller to do that and handle errors before calling e_table_new().
|
|
|
|
| |
No longer used.
|
|
|
|
| |
No longer used.
|
|
|
|
| |
No longer used.
|
|
|
|
|
| |
The other parts of this UI still look ancient, but this is a good first
step. Plus we can remove a number of now-unused ETable-related classes.
|
|
|
|
|
| |
A new ETable column selection and ordering widget that looks like
it was written in the 21st century. Derives from ETreeViewFrame.
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
No longer used.
|
|
|
|
| |
No longer used.
|
|
|
|
| |
Use g_file_get_contents() and e_table_specification_load_from_string().
|
|
|
|
| |
New parser implementation that uses GMarkupParser instead of libxml2.
|
|
|
|
| |
New parser implementation that uses GMarkupParser instead of libxml2.
|
|
|
|
| |
New parser implementation that uses GMarkupParser instead of libxml2.
|
|
|
|
|
|
|
|
| |
Replace ETableSortColumn with separate ETableColumnSpecification and
GtkSortType parameters in the "get_nth" and "set_nth" functions.
Makes some other parts of the code simpler since it no longer has to
translate a column number to a column specification.
|
| |
|
|
|
|
| |
And convert them to GArrays internally.
|
|
|
|
| |
So we don't have to worry about negative values.
|
|
|
|
| |
Use e_table_sort_info_sorting_get_count() to obtain the value.
|
|
|
|
| |
Use e_table_sort_info_grouping_get_count() to obtain the value.
|
|
|
|
| |
Use e_table_sort_info_get_can_group() to obtain the value.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
ETableSortInfo now keeps a weak reference on the ETableSpecification to
which it's associated. The plan is to replace the column index numbers
with a direct reference to an ETableColumnSpecification from the spec.
New functions:
e_table_sort_info_ref_specification()
|
| |
|
| |
|
|
|
|
|
|
|
|
| |
I don't remember why E_TASK_TABLE_DEFAULT_STATE was needed when
e-calendar-table.etspec already specifies a default ETableState.
Some of the column numbers it was referencing weren't even valid.
Removing it seems to make no difference in Evolution.
|
|
|
|
|
|
|
| |
I don't remember why E_MEMO_TABLE_DEFAULT_STATE was needed when
e-memo-table.etspec already specifies a default ETableState.
Removing it seems to make no difference in Evolution.
|
| |
|
|
|
|
| |
Will eventually replace e_table_header_get_column_by_col_idx().
|
|
|
|
| |
Eliminates a few redundant fields.
|
|
|
|
|
| |
Lookups up the column index of an ETableColumnSpecification, returns a
negative value if no match found.
|
|
|
|
|
| |
Compares two ETableColumnSpecification instances for equality, which
just means they both refer to the same model column number.
|
| |
|
|
|
|
| |
Use e_table_specification_ref_columns() to access column specs.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
ETableState now keeps a weak reference on the ETableSpecification to
which it's associated. The plan is to replace the column index numbers
with a direct reference to an ETableColumnSpecification from the spec.
New functions:
e_table_state_ref_specification()
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
Done as part of bug #700894
|
| |
|
| |
|
|
|
|
|
| |
Check if the client supports setting 'after start' reminder and disable
it if necessary (and also disabling 'before end of appoint')
|
|
|
|
|
|
|
| |
When the SASL mechanism reports that it can try an "empty password", give
it the opportunity to do so before we demand that the user provide one.
(Patch mostly by mbarnes; thanks)
|
| |
|
|
|
|
|
|
|
| |
The network-available property was unset when going offline, but
never set again, which caused download of messages for offline use
broken, because it downloads for offline only if the network-available
is set.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
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);
|