Add EngineControl::stop_engine method to show errors when stopping engine
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.
This commit is contained in:
parent
1195aeb64e
commit
cd4dd08931
@ -419,6 +419,18 @@ EngineControl::start_engine ()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
EngineControl::stop_engine ()
|
||||||
|
{
|
||||||
|
if (ARDOUR::AudioEngine::instance()->stop()) {
|
||||||
|
MessageDialog msg(*this,
|
||||||
|
ARDOUR::AudioEngine::instance()->get_last_backend_error());
|
||||||
|
msg.run();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
EngineControl::on_response (int response_id)
|
EngineControl::on_response (int response_id)
|
||||||
{
|
{
|
||||||
@ -2260,13 +2272,12 @@ EngineControl::push_state_to_backend (bool start)
|
|||||||
|
|
||||||
if (was_running) {
|
if (was_running) {
|
||||||
if (restart_required) {
|
if (restart_required) {
|
||||||
if (ARDOUR_UI::instance()->disconnect_from_engine ()) {
|
if (ARDOUR::AudioEngine::instance()->stop()) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (change_driver && backend->set_driver (get_driver())) {
|
if (change_driver && backend->set_driver (get_driver())) {
|
||||||
error << string_compose (_("Cannot set driver to %1"), get_driver()) << endmsg;
|
error << string_compose (_("Cannot set driver to %1"), get_driver()) << endmsg;
|
||||||
return -1;
|
return -1;
|
||||||
@ -2578,7 +2589,7 @@ EngineControl::on_switch_page (GtkNotebookPage*, guint page_num)
|
|||||||
|
|
||||||
if (ARDOUR::AudioEngine::instance()->running()) {
|
if (ARDOUR::AudioEngine::instance()->running()) {
|
||||||
// TODO - mark as 'stopped for latency
|
// TODO - mark as 'stopped for latency
|
||||||
ARDOUR_UI::instance()->disconnect_from_engine ();
|
stop_engine ();
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -2885,9 +2896,9 @@ void
|
|||||||
EngineControl::connect_disconnect_click()
|
EngineControl::connect_disconnect_click()
|
||||||
{
|
{
|
||||||
if (ARDOUR::AudioEngine::instance()->running()) {
|
if (ARDOUR::AudioEngine::instance()->running()) {
|
||||||
ARDOUR_UI::instance()->disconnect_from_engine ();
|
stop_engine ();
|
||||||
} else {
|
} else {
|
||||||
ARDOUR_UI::instance()->reconnect_to_engine ();
|
start_engine ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -300,6 +300,7 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList {
|
|||||||
void post_push ();
|
void post_push ();
|
||||||
void update_sensitivity ();
|
void update_sensitivity ();
|
||||||
bool start_engine ();
|
bool start_engine ();
|
||||||
|
bool stop_engine ();
|
||||||
|
|
||||||
/* latency measurement */
|
/* latency measurement */
|
||||||
void latency_button_clicked ();
|
void latency_button_clicked ();
|
||||||
|
Loading…
Reference in New Issue
Block a user