This replaces using ARDOUR_UI::disconnect_from_session which is only used by the
EngineControl class. ARDOUR_UI::disconnect_from_session also disconnects from
the AudioEngine::Halted signal which seems unnecessary as Halted is not emitted
when stopping the engine and calling update_sample_rate() which is already
handled when the AudioEngine::Stopped signal is emitted.
Currently the last backend error string is only set when calling
AudioBackend::start. Errors that occur when calling other AudioBackend methods
like AudioBackend::set_buffer_size do not set the last backend error string.
So until all the required AudioBackend methods return an ErrorCode and
last_backend_error() can be removed just set it to a default string.
Until all errors that occur are correctly indicated by returning an error code
there will still be situations where last_backend_error() is not indicative of
the true error. For instance AudioEngine::start is called and it fails but
returns a valid error code so last_backend_error() is set, then some other
engine/backend method is called that fails and as last_backend_error is not
set the GUI will display the incorrect error message.
* solo groups
* cancel-solo
* SIP <> AFL/PFL changes
The optimized plural-form route_solo_changed() relied on the false
premise that solo-groups and port-connections are disjoint sets.
-=-
e.g. "cancel all solo" calls set_solo(get_routes(), false);
Since All routes are affected, the "non_solo_change" set is empty, and
no changes were propagated up/downstream.
Routes that indirectly change state as group-members, wrongly end up in
the "non_solo_change" list instead of the "solo_change" list.
If a route feeds another in the same group, no changes were propagated.