summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/ardour/ardour/file_source.h3
-rw-r--r--libs/ardour/file_source.cc9
-rw-r--r--libs/ardour/import.cc10
3 files changed, 20 insertions, 2 deletions
diff --git a/libs/ardour/ardour/file_source.h b/libs/ardour/ardour/file_source.h
index 291b3a3d76..5898d04f0a 100644
--- a/libs/ardour/ardour/file_source.h
+++ b/libs/ardour/ardour/file_source.h
@@ -52,7 +52,8 @@ public:
int move_to_trash (const std::string& trash_dir_name);
void mark_take (const std::string& id);
- void mark_immutable ();
+ void mark_immutable ();
+ void mark_immutable_except_write();
void mark_nonremovable ();
const std::string& take_id () const { return _take_id; }
diff --git a/libs/ardour/file_source.cc b/libs/ardour/file_source.cc
index 2f7ad2caa8..3017615948 100644
--- a/libs/ardour/file_source.cc
+++ b/libs/ardour/file_source.cc
@@ -555,6 +555,15 @@ FileSource::mark_immutable ()
}
void
+FileSource::mark_immutable_except_write ()
+{
+ /* destructive sources stay writable, and their other flags don't change. */
+ if (!(_flags & Destructive)) {
+ _flags = Flag (_flags & ~(Removable|RemovableIfEmpty|RemoveAtDestroy|CanRename));
+ }
+}
+
+void
FileSource::mark_nonremovable ()
{
_flags = Flag (_flags & ~(Removable|RemovableIfEmpty|RemoveAtDestroy));
diff --git a/libs/ardour/import.cc b/libs/ardour/import.cc
index b47b99571b..433160fc20 100644
--- a/libs/ardour/import.cc
+++ b/libs/ardour/import.cc
@@ -582,7 +582,15 @@ Session::import_files (ImportStatus& status)
boost::shared_ptr<FileSource> fs = boost::dynamic_pointer_cast<FileSource>(*x);
if (fs) {
- fs->mark_immutable ();
+ /* Only audio files should be marked as
+ immutable - we may need to rewrite MIDI
+ files at any time.
+ */
+ if (boost::dynamic_pointer_cast<AudioFileSource> (fs)) {
+ fs->mark_immutable ();
+ } else {
+ fs->mark_immutable_except_write ();
+ }
fs->mark_nonremovable ();
}