resolve gtk + VST threading issues
[ardour.git] / libs / ardour / midiport_manager.cc
index 7abd47580b85ca5d2d002d1f3efe27a4bb5e2a23..6de043658690187d0af697e02e29c9fdb8f8951b 100644 (file)
@@ -32,6 +32,7 @@ using namespace PBD;
 
 MidiPortManager::MidiPortManager ()
 {
+       create_ports ();
 }
 
 MidiPortManager::~MidiPortManager ()
@@ -67,11 +68,11 @@ MidiPortManager::create_ports ()
                return;
        }
              
-       _midi_in  = AudioEngine::instance()->register_input_port (DataType::MIDI, _("MIDI control in"), true);
-       _midi_out = AudioEngine::instance()->register_output_port (DataType::MIDI, _("MIDI control out"), true);
+       _midi_in  = AudioEngine::instance()->register_input_port (DataType::MIDI, X_("MIDI control in"), true);
+       _midi_out = AudioEngine::instance()->register_output_port (DataType::MIDI, X_("MIDI control out"), true);
 
-       _mmc_in  = AudioEngine::instance()->register_input_port (DataType::MIDI, _("MMC in"), true);
-       _mmc_out = AudioEngine::instance()->register_output_port (DataType::MIDI, _("MMC out"), true);
+       _mmc_in  = AudioEngine::instance()->register_input_port (DataType::MIDI, X_("MMC in"), true);
+       _mmc_out = AudioEngine::instance()->register_output_port (DataType::MIDI, X_("MMC out"), true);
        
        /* XXX nasty type conversion needed because of the mixed inheritance
         * required to integrate MIDI::IPMidiPort and ARDOUR::AsyncMIDIPort.
@@ -92,14 +93,14 @@ MidiPortManager::create_ports ()
 
        boost::shared_ptr<ARDOUR::Port> p;
 
-       p = AudioEngine::instance()->register_input_port (DataType::MIDI, _("MTC in"));
+       p = AudioEngine::instance()->register_input_port (DataType::MIDI, X_("MTC in"));
        _mtc_input_port = boost::dynamic_pointer_cast<MidiPort> (p);
-       p = AudioEngine::instance()->register_output_port (DataType::MIDI, _("MTC out"));
+       p = AudioEngine::instance()->register_output_port (DataType::MIDI, X_("MTC out"));
        _mtc_output_port= boost::dynamic_pointer_cast<MidiPort> (p);
 
-       p = AudioEngine::instance()->register_input_port (DataType::MIDI, _("MIDI Clock in"));
+       p = AudioEngine::instance()->register_input_port (DataType::MIDI, X_("MIDI Clock in"));
        _midi_clock_input_port = boost::dynamic_pointer_cast<MidiPort> (p);
-       p = AudioEngine::instance()->register_output_port (DataType::MIDI, _("MIDI Clock out"));
+       p = AudioEngine::instance()->register_output_port (DataType::MIDI, X_("MIDI Clock out"));
        _midi_clock_output_port= boost::dynamic_pointer_cast<MidiPort> (p);
 
        /* These ports all need their incoming data handled in
@@ -110,21 +111,16 @@ MidiPortManager::create_ports ()
        _mtc_output_port->set_always_parse (true);
        _midi_clock_input_port->set_always_parse (true);
        _midi_clock_output_port->set_always_parse (true);
-
-       set_midi_port_states ();
 }
 
 void
-MidiPortManager::set_midi_port_states ()
+MidiPortManager::set_midi_port_states (const XMLNodeList&nodes)
 {
-       list<XMLNode*> nodes;
        XMLProperty* prop;
        typedef map<std::string,boost::shared_ptr<Port> > PortMap;
        PortMap ports;
        const int version = 0;
 
-       nodes = Config->midi_port_states ();
-
        ports.insert (make_pair (_mtc_input_port->name(), _mtc_input_port));
        ports.insert (make_pair (_mtc_output_port->name(), _mtc_output_port));
        ports.insert (make_pair (_midi_clock_input_port->name(), _midi_clock_input_port));
@@ -134,7 +130,7 @@ MidiPortManager::set_midi_port_states ()
        ports.insert (make_pair (_mmc_input_port->name(), _mmc_in));
        ports.insert (make_pair (_mmc_output_port->name(), _mmc_out));
        
-       for (list<XMLNode*>::iterator n = nodes.begin(); n != nodes.end(); ++n) {
+       for (XMLNodeList::const_iterator n = nodes.begin(); n != nodes.end(); ++n) {
                if ((prop = (*n)->property (X_("name"))) == 0) {
                        continue;
                }