From d0a116b2ae1af29d16273be9ad6ec6e5fce95fbf Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sat, 4 Apr 2020 01:23:58 +0200 Subject: [PATCH] Forward instrument MIDNAM changed signal --- libs/ardour/ardour/instrument_info.h | 4 ++++ libs/ardour/instrument_info.cc | 13 +++++++++++++ 2 files changed, 17 insertions(+) diff --git a/libs/ardour/ardour/instrument_info.h b/libs/ardour/ardour/instrument_info.h index 9468831a85..0d3957fb68 100644 --- a/libs/ardour/ardour/instrument_info.h +++ b/libs/ardour/ardour/instrument_info.h @@ -86,6 +86,8 @@ private: _plugin_mode = ""; } + void emit_changed (); + std::string _external_instrument_model; std::string _external_instrument_mode; @@ -93,6 +95,8 @@ private: mutable std::string _plugin_mode; boost::weak_ptr internal_instrument; + + PBD::ScopedConnection _midnam_changed; }; } diff --git a/libs/ardour/instrument_info.cc b/libs/ardour/instrument_info.cc index fcc7baf1cd..c00efeedbf 100644 --- a/libs/ardour/instrument_info.cc +++ b/libs/ardour/instrument_info.cc @@ -68,11 +68,24 @@ InstrumentInfo::set_internal_instrument (boost::shared_ptr p) //std::cerr << "InstrumentInfo::set_internal_instrument -- NO CHANGE\n"; return; } + _midnam_changed.disconnect (); //std::cerr << "InstrumentInfo::set_internal_instrument -> '" << (p ? p->name () : "(NULL)") << "'\n"; internal_instrument = p; if (_external_instrument_model.empty () || _external_instrument_model == _("Unknown")) { Changed (); /* EMIT SIGNAL */ } + + boost::shared_ptr pi = boost::dynamic_pointer_cast (p); + if (pi && pi->plugin ()->has_midnam ()) { + pi->plugin()->UpdatedMidnam.connect_same_thread (_midnam_changed, boost::bind (&InstrumentInfo::emit_changed, this)); + } +} + +void +InstrumentInfo::emit_changed () { + if (_external_instrument_model.empty ()) { + Changed (); + } } bool