From df90d4f6363965dcdd9c84892a92c4e11daf06d1 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sun, 23 Dec 2018 21:51:09 +0100 Subject: Engine Dialog MIDI tweaks * Allow to dynamically en/disable MIDI devices when running * Push midi latencies directly to running backend --- gtk2_ardour/engine_dialog.cc | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'gtk2_ardour/engine_dialog.cc') diff --git a/gtk2_ardour/engine_dialog.cc b/gtk2_ardour/engine_dialog.cc index b883bc352e..bc378afebe 100644 --- a/gtk2_ardour/engine_dialog.cc +++ b/gtk2_ardour/engine_dialog.cc @@ -902,6 +902,18 @@ EngineControl::midi_latency_adjustment_changed (Gtk::Adjustment *a, MidiDeviceSe } else { device->output_latency = a->get_value(); } + + if (ARDOUR::AudioEngine::instance()->running() && !_measure_midi) { + boost::shared_ptr backend = ARDOUR::AudioEngine::instance()->current_backend(); + assert (backend); + if (backend->can_change_systemic_latency_when_running () && device->enabled) { + if (for_input) { + backend->set_systemic_midi_input_latency (device->name, device->input_latency); + } else { + backend->set_systemic_midi_output_latency (device->name, device->output_latency); + } + } + } } void @@ -909,6 +921,16 @@ EngineControl::midi_device_enabled_toggled (ArdourButton *b, MidiDeviceSettings b->set_active (!b->get_active()); device->enabled = b->get_active(); refresh_midi_display(device->name); + + if (ARDOUR::AudioEngine::instance()->running()) { + boost::shared_ptr backend = ARDOUR::AudioEngine::instance()->current_backend(); + assert (backend); + backend->set_midi_device_enabled (device->name, device->enabled); + if (backend->can_change_systemic_latency_when_running () && device->enabled) { + backend->set_systemic_midi_input_latency (device->name, device->input_latency); + backend->set_systemic_midi_output_latency (device->name, device->output_latency); + } + } } void @@ -3101,7 +3123,16 @@ EngineControl::device_list_changed () if (!ARDOUR::AudioEngine::instance()->running()) { list_devices (); } + midi_option_changed(); + + if (notebook.get_current_page() == midi_tab) { + if (_midi_devices.empty ()) { + notebook.set_current_page (0); + } else { + refresh_midi_display (); + } + } } void -- cgit v1.2.3