From 7982d69cb368d175ad1850f719929ae7712df0ec Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Fri, 14 Jun 2024 21:19:51 -0600 Subject: [PATCH 1/3] no need to set up midi input enable button for every ::set_route() And additionally, do not pack it into the same container over and over, since that generates gtk error messages --- gtk2_ardour/mixer_strip.cc | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc index bd8e82f159..6fb5ba7c73 100644 --- a/gtk2_ardour/mixer_strip.cc +++ b/gtk2_ardour/mixer_strip.cc @@ -351,6 +351,14 @@ MixerStrip::init () global_vpacker.pack_start (output_button, Gtk::PACK_SHRINK); global_vpacker.pack_start (_comment_button, Gtk::PACK_SHRINK); + midi_input_enable_button.set_size_request (PX_SCALE(19), PX_SCALE(19)); + midi_input_enable_button.set_name ("midi input button"); + midi_input_enable_button.set_elements ((ArdourButton::Element)(ArdourButton::Edge|ArdourButton::Body|ArdourButton::VectorIcon)); + midi_input_enable_button.set_icon (ArdourIcon::DinMidi); + midi_input_enable_button.signal_button_press_event().connect (sigc::mem_fun (*this, &MixerStrip::input_active_button_press), false); + midi_input_enable_button.signal_button_release_event().connect (sigc::mem_fun (*this, &MixerStrip::input_active_button_release), false); + set_tooltip (midi_input_enable_button, _("Enable/Disable MIDI input")); + #ifndef MIXBUS //add a spacer underneath the master bus; //this fills the area that is taken up by the scrollbar on the tracks; @@ -684,15 +692,9 @@ MixerStrip::set_route (std::shared_ptr rt) update_trim_control(); if (is_midi_track()) { - - midi_input_enable_button.set_size_request (PX_SCALE(19), PX_SCALE(19)); - midi_input_enable_button.set_name ("midi input button"); - midi_input_enable_button.set_elements ((ArdourButton::Element)(ArdourButton::Edge|ArdourButton::Body|ArdourButton::VectorIcon)); - midi_input_enable_button.set_icon (ArdourIcon::DinMidi); - midi_input_enable_button.signal_button_press_event().connect (sigc::mem_fun (*this, &MixerStrip::input_active_button_press), false); - midi_input_enable_button.signal_button_release_event().connect (sigc::mem_fun (*this, &MixerStrip::input_active_button_release), false); - set_tooltip (midi_input_enable_button, _("Enable/Disable MIDI input")); - input_button_box.pack_start (midi_input_enable_button, false, false); + if (!midi_input_enable_button.get_parent()) { + input_button_box.pack_start (midi_input_enable_button, false, false); + } /* get current state */ midi_input_status_changed (); From cf58a157e31da701617e9ac7e5d6ebf9313ab0cc Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Fri, 14 Jun 2024 21:22:47 -0600 Subject: [PATCH 2/3] extend PortManager API to include 3rd argument used by backend get_connections() Value is defaulted so this does not change behavior at all --- libs/ardour/ardour/port_manager.h | 2 +- libs/ardour/port_manager.cc | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libs/ardour/ardour/port_manager.h b/libs/ardour/ardour/port_manager.h index ed9605e808..5009e7492c 100644 --- a/libs/ardour/ardour/port_manager.h +++ b/libs/ardour/ardour/port_manager.h @@ -151,7 +151,7 @@ public: bool connected (const std::string&); bool physically_connected (const std::string&); - int get_connections (const std::string&, std::vector&); + int get_connections (const std::string&, std::vector&, bool process_context_safe = true); /* Naming */ diff --git a/libs/ardour/port_manager.cc b/libs/ardour/port_manager.cc index 0b6681fefb..0d36991872 100644 --- a/libs/ardour/port_manager.cc +++ b/libs/ardour/port_manager.cc @@ -749,7 +749,7 @@ PortManager::physically_connected (const string& port_name) } int -PortManager::get_connections (const string& port_name, std::vector& s) +PortManager::get_connections (const string& port_name, std::vector& s, bool process_context_safe) { if (!_backend) { s.clear (); @@ -763,7 +763,7 @@ PortManager::get_connections (const string& port_name, std::vector& return 0; } - return _backend->get_connections (handle, s); + return _backend->get_connections (handle, s, process_context_safe); } int From 0847dc8a37927ab3161dca2085dcc3c8b7aebcde Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Fri, 14 Jun 2024 22:04:52 -0600 Subject: [PATCH 3/3] when disconnecting a MIDI port for follows-selection, get ALL connections without the 3rd argument, we only get information about ports that we own. --- libs/ardour/session_midi.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libs/ardour/session_midi.cc b/libs/ardour/session_midi.cc index b1e8e7eb6c..2fc40386ca 100644 --- a/libs/ardour/session_midi.cc +++ b/libs/ardour/session_midi.cc @@ -744,7 +744,8 @@ Session::disconnect_port_for_rewire (std::string const& port) const bool keep_ctrl = mpf & MidiPortControl; vector port_connections; - AudioEngine::instance()->get_connections (port, port_connections); + AudioEngine::instance()->get_connections (port, port_connections, false); + for (vector::iterator i = port_connections.begin(); i != port_connections.end(); ++i) { /* test if (*i) is a control-surface input port */