dramatic change in logic and naming for operations related to adding a MIDI region...
[ardour.git] / libs / ardour / midi_diskstream.cc
index a1a640cd1c08475391d3ab34c44464f2a2dfc63b..fdf155d78b76cdc9795d7928161d13cc07a7d222 100644 (file)
@@ -1198,7 +1198,7 @@ MidiDiskstream::use_new_write_source (uint32_t n)
 
        try {
                _write_source = boost::dynamic_pointer_cast<SMFSource>(
-                       _session.create_midi_source_for_session (0, name ()));
+                       _session.create_midi_source_for_session (name ()));
 
                if (!_write_source) {
                        throw failed_constructor();
@@ -1213,25 +1213,30 @@ MidiDiskstream::use_new_write_source (uint32_t n)
 
        return 0;
 }
-
-list<boost::shared_ptr<Source> >
-MidiDiskstream::steal_write_sources()
+/**
+ * We want to use the name of the existing write source (the one that will be
+ * used by the next capture) for another purpose. So change the name of the
+ * current source, and return its current name.
+ *
+ * Return an empty string if the change cannot be accomplished.
+ */
+std::string
+MidiDiskstream::steal_write_source_name ()
 {
-       list<boost::shared_ptr<Source> > ret;
-
-       /* put some data on the disk, even if its just a header for an empty file */
-       boost::dynamic_pointer_cast<SMFSource> (_write_source)->ensure_disk_file ();
-
-       /* never let it go away */
-       _write_source->mark_nonremovable ();
-
-       ret.push_back (_write_source);
+       string our_old_name = _write_source->name();
 
-       /* get a new one */
-
-       use_new_write_source (0);
+       /* this will bump the name of the current write source to the next one
+        * (e.g. "MIDI 1-1" gets renamed to "MIDI 1-2"), thus leaving the
+        * current write source name (e.g. "MIDI 1-1" available). See the
+        * comments in Session::create_midi_source_for_track() about why we do
+        * this.
+        */
 
-       return ret;
+       if (_write_source->set_source_name (name(), false)) {
+               return string();
+       }
+       
+       return our_old_name;
 }
 
 void