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")
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()
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.
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()
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.
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.
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
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 outside of e-table-specification.c.
Its logic is merged into e_table_specification_load_from_file(), but
that too will be removed momentarily.
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.
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()