diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2016-10-19 17:17:30 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2016-10-19 17:49:35 -0400 |
commit | f96b6982344dd390b3ee4882e96d1a7b83374b0f (patch) | |
tree | cb9c7413b2dbb4917b5cd82cc96b5661fc70c756 /libs/ardour/port_manager.cc | |
parent | 0a8ab08e5f02b47e82343554b20e317e1b21731d (diff) |
infrastructure for MIDI-input-follows-selection
Diffstat (limited to 'libs/ardour/port_manager.cc')
-rw-r--r-- | libs/ardour/port_manager.cc | 47 |
1 files changed, 38 insertions, 9 deletions
diff --git a/libs/ardour/port_manager.cc b/libs/ardour/port_manager.cc index d24c929930..febef6aa4f 100644 --- a/libs/ardour/port_manager.cc +++ b/libs/ardour/port_manager.cc @@ -852,6 +852,13 @@ PortManager::port_is_control_only (std::string const& name) return regexec (&compiled_pattern, name.c_str(), 0, 0, 0) == 0; } +bool +PortManager::port_is_for_midi_selection (std::string const & name) +{ + Glib::Threads::Mutex::Lock lm (midi_selection_ports_mutex); + return find (_midi_selection_ports.begin(), _midi_selection_ports.end(), name) != _midi_selection_ports.end(); +} + void PortManager::get_midi_selection_ports (MidiSelectionPorts& copy) const { @@ -862,25 +869,47 @@ PortManager::get_midi_selection_ports (MidiSelectionPorts& copy) const void PortManager::add_to_midi_selection_ports (string const & port) { - Glib::Threads::Mutex::Lock lm (midi_selection_ports_mutex); - if (find (_midi_selection_ports.begin(), _midi_selection_ports.end(), port) == _midi_selection_ports.end()) { - _midi_selection_ports.push_back (port); + bool emit = false; + + { + Glib::Threads::Mutex::Lock lm (midi_selection_ports_mutex); + if (find (_midi_selection_ports.begin(), _midi_selection_ports.end(), port) == _midi_selection_ports.end()) { + _midi_selection_ports.push_back (port); + emit = true; + } + } + + if (emit) { + MidiSelectionPortsChanged (); /* EMIT SIGNAL */ } } void PortManager::remove_from_midi_selection_ports (string const & port) { - Glib::Threads::Mutex::Lock lm (midi_selection_ports_mutex); - MidiSelectionPorts::iterator x = find (_midi_selection_ports.begin(), _midi_selection_ports.end(), port); - if (x != _midi_selection_ports.end()) { - _midi_selection_ports.erase (x); + bool emit = false; + + { + Glib::Threads::Mutex::Lock lm (midi_selection_ports_mutex); + MidiSelectionPorts::iterator x = find (_midi_selection_ports.begin(), _midi_selection_ports.end(), port); + if (x != _midi_selection_ports.end()) { + _midi_selection_ports.erase (x); + emit = true; + } + } + + if (emit) { + MidiSelectionPortsChanged (); /* EMIT SIGNAL */ } } void PortManager::clear_midi_selection_ports () { - Glib::Threads::Mutex::Lock lm (midi_selection_ports_mutex); - _midi_selection_ports.clear (); + { + Glib::Threads::Mutex::Lock lm (midi_selection_ports_mutex); + _midi_selection_ports.clear (); + } + + MidiSelectionPortsChanged (); /* EMIT SIGNAL */ } |