summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2014-04-04 15:26:44 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2014-04-14 13:00:24 -0400
commite1bf151ab0a5dd1d467ea2f43b0cd9c70caecfae (patch)
treeb962a98833202c01b9b36f5f189cf5a41fec6a18
parent99bf5d9eeda1e5e1811d660c0c22bb5a2d4984c0 (diff)
after cloning a MIDI region, mark the source file as non-removable. Fixes reports about missing MIDI files on the forums and IRC
-rw-r--r--libs/ardour/ardour/file_source.h3
-rw-r--r--libs/ardour/ardour/smf_source.h2
-rw-r--r--libs/ardour/midi_source.cc5
-rw-r--r--libs/ardour/smf_source.cc12
4 files changed, 20 insertions, 2 deletions
diff --git a/libs/ardour/ardour/file_source.h b/libs/ardour/ardour/file_source.h
index 3d9c8c623f..6991840beb 100644
--- a/libs/ardour/ardour/file_source.h
+++ b/libs/ardour/ardour/file_source.h
@@ -82,6 +82,8 @@ public:
static PBD::Signal3<int,std::string,std::string,std::vector<std::string> > AmbiguousFileName;
+ virtual void prevent_deletion ();
+
protected:
FileSource (Session& session, DataType type,
const std::string& path,
@@ -103,7 +105,6 @@ protected:
std::string _origin;
bool _open;
- void prevent_deletion ();
};
} // namespace ARDOUR
diff --git a/libs/ardour/ardour/smf_source.h b/libs/ardour/ardour/smf_source.h
index ca337a62c2..e422d37f62 100644
--- a/libs/ardour/ardour/smf_source.h
+++ b/libs/ardour/ardour/smf_source.h
@@ -69,6 +69,8 @@ public:
static bool safe_midi_file_extension (const std::string& path);
+ void prevent_deletion ();
+
protected:
void set_path (const std::string& newpath);
diff --git a/libs/ardour/midi_source.cc b/libs/ardour/midi_source.cc
index 124d3f7c9b..79922571c1 100644
--- a/libs/ardour/midi_source.cc
+++ b/libs/ardour/midi_source.cc
@@ -39,6 +39,7 @@
#include "ardour/midi_model.h"
#include "ardour/midi_state_tracker.h"
#include "ardour/midi_source.h"
+#include "ardour/file_source.h"
#include "ardour/session.h"
#include "ardour/session_directory.h"
#include "ardour/source_factory.h"
@@ -381,6 +382,10 @@ MidiSource::clone (const string& path, Evoral::MusicalTime begin, Evoral::Musica
} else {
newsrc->set_model (_model);
}
+
+ /* this file is not removable (but since it is MIDI, it is mutable) */
+
+ boost::dynamic_pointer_cast<FileSource> (newsrc)->prevent_deletion ();
return newsrc;
}
diff --git a/libs/ardour/smf_source.cc b/libs/ardour/smf_source.cc
index 52c950e76f..4167bea877 100644
--- a/libs/ardour/smf_source.cc
+++ b/libs/ardour/smf_source.cc
@@ -72,9 +72,10 @@ SMFSource::SMFSource (Session& s, const string& path, Source::Flag flags)
return;
}
- if (open(_path)) {
+ if (open (_path)) {
throw failed_constructor ();
}
+
_open = true;
}
@@ -657,3 +658,12 @@ SMFSource::ensure_disk_file ()
}
}
+void
+SMFSource::prevent_deletion ()
+{
+ /* Unlike the audio case, the MIDI file remains mutable (because we can
+ edit MIDI data)
+ */
+
+ _flags = Flag (_flags & ~(Removable|RemovableIfEmpty|RemoveAtDestroy));
+}