diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2013-10-23 13:51:04 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2013-10-23 15:38:02 -0400 |
commit | cfafa610f09334029f8bda4877bd7de98345ea94 (patch) | |
tree | 6ff94c09fca507630a79274502bc03dea5d33cc0 /libs/ardour/midi_ui.cc | |
parent | a18db90264a91a5fe80b5993511c960329964742 (diff) |
fix MMC
MTC and MIDI Clock port input handling was moved into the process/RT thread(s) during audioengine work, but MMC was
left orphaned. Add it to the port(s) handled by the MIDI UI thread.
Also, remove PortChange request from MidiUI because it has no meaning anymore
Diffstat (limited to 'libs/ardour/midi_ui.cc')
-rw-r--r-- | libs/ardour/midi_ui.cc | 58 |
1 files changed, 27 insertions, 31 deletions
diff --git a/libs/ardour/midi_ui.cc b/libs/ardour/midi_ui.cc index 7346c0244c..0729132d6c 100644 --- a/libs/ardour/midi_ui.cc +++ b/libs/ardour/midi_ui.cc @@ -39,7 +39,6 @@ using namespace Glib; #include "i18n.h" -BaseUI::RequestType MidiControlUI::PortChange = BaseUI::new_request_type(); MidiControlUI* MidiControlUI::_instance = 0; #include "pbd/abstract_ui.cc" /* instantiate the template */ @@ -60,24 +59,7 @@ MidiControlUI::~MidiControlUI () void MidiControlUI::do_request (MidiUIRequest* req) { - if (req->type == PortChange) { - - /* restart event loop with new ports */ - DEBUG_TRACE (DEBUG::MidiIO, "reset ports\n"); - reset_ports (); - - } else if (req->type == CallSlot) { - -#ifndef NDEBUG - if (getenv ("DEBUG_THREADED_SIGNALS")) { - cerr << "MIDI UI calls a slot\n"; - } -#endif - - req->the_slot (); - - } else if (req->type == Quit) { - + if (req->type == Quit) { BaseUI::quit (); } } @@ -117,23 +99,37 @@ MidiControlUI::clear_ports () void MidiControlUI::reset_ports () { - if (port_sources.empty()) { - AsyncMIDIPort* async = dynamic_cast<AsyncMIDIPort*> (_session.midi_input_port()); - - if (!async) { - return; - } - - int fd; + if (!port_sources.empty()) { + return; + } + + vector<AsyncMIDIPort*> ports; + AsyncMIDIPort* p; + + if ((p = dynamic_cast<AsyncMIDIPort*> (_session.midi_input_port()))) { + ports.push_back (p); + } + + + if ((p = dynamic_cast<AsyncMIDIPort*> (_session.mmc_input_port()))) { + ports.push_back (p); + } + + if (ports.empty()) { + return; + } + + int fd; + for (vector<AsyncMIDIPort*>::const_iterator pi = ports.begin(); pi != ports.end(); ++pi) { - if ((fd = async->selectable ()) >= 0) { + if ((fd = (*pi)->selectable ()) >= 0) { Glib::RefPtr<IOSource> psrc = IOSource::create (fd, IO_IN|IO_HUP|IO_ERR); - psrc->connect (sigc::bind (sigc::mem_fun (this, &MidiControlUI::midi_input_handler), async)); + psrc->connect (sigc::bind (sigc::mem_fun (this, &MidiControlUI::midi_input_handler), *pi)); psrc->attach (_main_loop->get_context()); - + // glibmm hack: for now, store only the GSource* - + port_sources.push_back (psrc->gobj()); g_source_ref (psrc->gobj()); } |