summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Mayberry <mojofunk@gmail.com>2015-10-03 14:09:45 +1000
committerTim Mayberry <mojofunk@gmail.com>2015-10-06 13:29:57 +1000
commitcd4dd0893153729e5ffbfcfeeac6530c0025aee7 (patch)
treeaddd81ddcd5eb77fcd38232adccd8abf536f0215
parent1195aeb64e785aa9554e2ee3fb7e1b5092ec9bb7 (diff)
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.
-rw-r--r--gtk2_ardour/engine_dialog.cc21
-rw-r--r--gtk2_ardour/engine_dialog.h1
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 ();