diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc index 9eed9ffebc..e2c80da98e 100644 --- a/gtk2_ardour/mixer_strip.cc +++ b/gtk2_ardour/mixer_strip.cc @@ -365,6 +365,14 @@ MixerStrip::init () global_vpacker.pack_start (output_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; @@ -715,15 +723,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 (); 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 c423ba65b8..f13637f6bb 100644 --- a/libs/ardour/port_manager.cc +++ b/libs/ardour/port_manager.cc @@ -751,7 +751,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 (); @@ -765,7 +765,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 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 */