const correctness.
[ardour.git] / libs / ardour / midi_region.cc
index fe49547bf3ef8a3a38aff5aa63d22854dec19f4c..c65758b01e315867b6a5bbf6ba9864f8a0637427 100644 (file)
@@ -51,7 +51,7 @@ using namespace PBD;
 MidiRegion::MidiRegion (const SourceList& srcs)
        : Region (srcs)
 {
-       midi_source(0)->Switched.connect_same_thread (*this, boost::bind (&MidiRegion::switch_source, this, _1));
+       // midi_source(0)->Switched.connect_same_thread (*this, boost::bind (&MidiRegion::switch_source, this, _1));
        midi_source(0)->ModelChanged.connect_same_thread (_source_connection, boost::bind (&MidiRegion::model_changed, this));
        model_changed ();
        assert(_name.val().find("/") == string::npos);
@@ -63,7 +63,7 @@ MidiRegion::MidiRegion (boost::shared_ptr<const MidiRegion> other, frameoffset_t
        : Region (other, offset, offset_relative)
 {
        assert(_name.val().find("/") == string::npos);
-       midi_source(0)->Switched.connect_same_thread (*this, boost::bind (&MidiRegion::switch_source, this, _1));
+       // midi_source(0)->Switched.connect_same_thread (*this, boost::bind (&MidiRegion::switch_source, this, _1));
        midi_source(0)->ModelChanged.connect_same_thread (_source_connection, boost::bind (&MidiRegion::model_changed, this));
        model_changed ();
 }
@@ -258,10 +258,13 @@ MidiRegion::switch_source(boost::shared_ptr<Source> src)
        }
 
        // MIDI regions have only one source
-       _sources.clear();
-       _sources.push_back(msrc);
+        SourceList srcs;
+        srcs.push_back (msrc);
 
-       set_name(msrc->name());
+        drop_sources ();
+        use_sources (srcs);
+        
+       set_name (msrc->name());
 
        msrc->ModelChanged.connect_same_thread (_source_connection, boost::bind (&MidiRegion::model_changed, this));
 }
@@ -269,6 +272,10 @@ MidiRegion::switch_source(boost::shared_ptr<Source> src)
 void
 MidiRegion::model_changed ()
 {
+       if (!model()) {
+               return;
+       }
+       
        /* build list of filtered Parameters, being those whose automation state is not `Play' */
 
        _filtered_parameters.clear ();