summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2013-10-15 13:15:03 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2013-10-15 13:15:03 -0400
commit6e0a3c4853ae94aebe487161f2c1f2ad9bb8a875 (patch)
tree14c7e9f85a4af91c55293f4b02e6c833bf5ca72d /gtk2_ardour
parentdf13a8c0b12c287cef7210f7cf98af9df6991c82 (diff)
try to prevent crash if running latency calibration with JACK setup that is lacking input or output ports (re: #5721 and #5719)
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/engine_dialog.cc41
-rw-r--r--gtk2_ardour/engine_dialog.h1
2 files changed, 35 insertions, 7 deletions
diff --git a/gtk2_ardour/engine_dialog.cc b/gtk2_ardour/engine_dialog.cc
index aff1e22508..c7d996ae55 100644
--- a/gtk2_ardour/engine_dialog.cc
+++ b/gtk2_ardour/engine_dialog.cc
@@ -336,7 +336,7 @@ EngineControl::EngineControl ()
basic_packer.attach (*label, 0, 1, 0, 1, xopt, (AttachOptions) 0);
basic_packer.attach (backend_combo, 1, 2, 0, 1, xopt, (AttachOptions) 0);
- lm_button.signal_clicked.connect (sigc::bind (sigc::mem_fun (notebook, &Gtk::Notebook::set_current_page), latency_tab));
+ lm_button.signal_clicked.connect (sigc::mem_fun (*this, &EngineControl::calibrate_latency));
lm_button.set_name ("record enable button");
if (_have_control) {
build_full_control_notebook ();
@@ -514,14 +514,34 @@ EngineControl::EngineControl ()
EngineControl::enable_latency_tab ()
{
vector<string> outputs;
- ARDOUR::AudioEngine::instance()->get_physical_outputs (ARDOUR::DataType::AUDIO, outputs);
- set_popdown_strings (lm_output_channel_combo, outputs);
- lm_output_channel_combo.set_active_text (outputs.front());
-
vector<string> inputs;
+
+ ARDOUR::AudioEngine::instance()->get_physical_outputs (ARDOUR::DataType::AUDIO, outputs);
ARDOUR::AudioEngine::instance()->get_physical_inputs (ARDOUR::DataType::AUDIO, inputs);
- set_popdown_strings (lm_input_channel_combo, inputs);
- lm_input_channel_combo.set_active_text (inputs.front());
+
+ if (inputs.empty() || outputs.empty()) {
+ MessageDialog msg (_("Your selected audio configuration is playback- or capture-only.\n\nLatency calibration requires playback and capture"));
+ lm_measure_button.set_sensitive (false);
+ notebook.set_current_page (0);
+ msg.run ();
+ return;
+ }
+
+ if (!outputs.empty()) {
+ set_popdown_strings (lm_output_channel_combo, outputs);
+ lm_output_channel_combo.set_active_text (outputs.front());
+ lm_output_channel_combo.set_sensitive (true);
+ } else {
+ lm_output_channel_combo.set_sensitive (false);
+ }
+
+ if (!inputs.empty()) {
+ set_popdown_strings (lm_input_channel_combo, inputs);
+ lm_input_channel_combo.set_active_text (inputs.front());
+ lm_input_channel_combo.set_sensitive (true);
+ } else {
+ lm_input_channel_combo.set_sensitive (false);
+ }
lm_measure_button.set_sensitive (true);
}
@@ -1795,3 +1815,10 @@ EngineControl::connect_disconnect_click()
ARDOUR_UI::instance()->reconnect_to_engine ();
}
}
+
+void
+EngineControl::calibrate_latency ()
+{
+ notebook.set_current_page (latency_tab);
+}
+
diff --git a/gtk2_ardour/engine_dialog.h b/gtk2_ardour/engine_dialog.h
index 0bf1c3a507..1bf15c2111 100644
--- a/gtk2_ardour/engine_dialog.h
+++ b/gtk2_ardour/engine_dialog.h
@@ -212,6 +212,7 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList {
PBD::ScopedConnection stopped_connection;
void connect_disconnect_click ();
+ void calibrate_latency ();
};
#endif /* __gtk2_ardour_engine_dialog_h__ */