From cd4dd0893153729e5ffbfcfeeac6530c0025aee7 Mon Sep 17 00:00:00 2001 From: Tim Mayberry Date: Sat, 3 Oct 2015 14:09:45 +1000 Subject: 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. --- gtk2_ardour/engine_dialog.cc | 21 ++++++++++++++++----- gtk2_ardour/engine_dialog.h | 1 + 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/gtk2_ardour/engine_dialog.cc b/gtk2_ardour/engine_dialog.cc index f76008cc43..82b7645161 100644 --- a/gtk2_ardour/engine_dialog.cc +++ b/gtk2_ardour/engine_dialog.cc @@ -419,6 +419,18 @@ EngineControl::start_engine () 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 EngineControl::on_response (int response_id) { @@ -2260,13 +2272,12 @@ EngineControl::push_state_to_backend (bool start) if (was_running) { if (restart_required) { - if (ARDOUR_UI::instance()->disconnect_from_engine ()) { + if (ARDOUR::AudioEngine::instance()->stop()) { return -1; } } } - if (change_driver && backend->set_driver (get_driver())) { error << string_compose (_("Cannot set driver to %1"), get_driver()) << endmsg; return -1; @@ -2578,7 +2589,7 @@ EngineControl::on_switch_page (GtkNotebookPage*, guint page_num) if (ARDOUR::AudioEngine::instance()->running()) { // TODO - mark as 'stopped for latency - ARDOUR_UI::instance()->disconnect_from_engine (); + stop_engine (); } { @@ -2885,9 +2896,9 @@ void EngineControl::connect_disconnect_click() { if (ARDOUR::AudioEngine::instance()->running()) { - ARDOUR_UI::instance()->disconnect_from_engine (); + stop_engine (); } else { - ARDOUR_UI::instance()->reconnect_to_engine (); + start_engine (); } } diff --git a/gtk2_ardour/engine_dialog.h b/gtk2_ardour/engine_dialog.h index ea56b94852..7fc0106b36 100644 --- a/gtk2_ardour/engine_dialog.h +++ b/gtk2_ardour/engine_dialog.h @@ -300,6 +300,7 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList { void post_push (); void update_sensitivity (); bool start_engine (); + bool stop_engine (); /* latency measurement */ void latency_button_clicked (); -- cgit v1.2.3