summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2011-02-14 16:04:53 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2011-02-14 16:04:53 +0000
commit7ac5d03cb870acb429b7fb0c315dd5774d4e0b8c (patch)
tree149474d5a0e388df5931721f09f5ef2d153df70d /libs/ardour
parentb307462f4f85cb75f5aa67b3d4f66f8717fa6051 (diff)
3.0 version of previous 2.X change to always prevent deletion of existing sources
git-svn-id: svn://localhost/ardour2/branches/3.0@8842 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/ardour/file_source.h2
-rw-r--r--libs/ardour/file_source.cc19
-rw-r--r--libs/ardour/sndfilesource.cc2
3 files changed, 22 insertions, 1 deletions
diff --git a/libs/ardour/ardour/file_source.h b/libs/ardour/ardour/file_source.h
index 4aadce27e8..699eec4c41 100644
--- a/libs/ardour/ardour/file_source.h
+++ b/libs/ardour/ardour/file_source.h
@@ -99,6 +99,8 @@ protected:
uint16_t _channel;
bool _within_session;
std::string _origin;
+
+ void prevent_deletion ();
};
} // namespace ARDOUR
diff --git a/libs/ardour/file_source.cc b/libs/ardour/file_source.cc
index 84d4f3043f..ae7fbdc38c 100644
--- a/libs/ardour/file_source.cc
+++ b/libs/ardour/file_source.cc
@@ -62,6 +62,8 @@ FileSource::FileSource (Session& session, DataType type, const string& path, con
, _origin (origin)
{
set_within_session_from_path (path);
+
+ prevent_deletion ();
}
FileSource::FileSource (Session& session, const XMLNode& node, bool /*must_exist*/)
@@ -75,6 +77,23 @@ FileSource::FileSource (Session& session, const XMLNode& node, bool /*must_exist
_path = _name;
_within_session = true;
+
+ prevent_deletion ();
+}
+
+void
+FileSource::prevent_deletion ()
+{
+ /* if this file already exists, it cannot be removed, ever
+ */
+
+ if (Glib::file_test (_path, Glib::FILE_TEST_EXISTS)) {
+ if (!(_flags & Destructive)) {
+ mark_immutable ();
+ } else {
+ _flags = Flag (_flags & ~(Removable|RemovableIfEmpty|RemoveAtDestroy));
+ }
+ }
}
bool
diff --git a/libs/ardour/sndfilesource.cc b/libs/ardour/sndfilesource.cc
index 3c219dc191..20d6067c36 100644
--- a/libs/ardour/sndfilesource.cc
+++ b/libs/ardour/sndfilesource.cc
@@ -612,7 +612,7 @@ bool
SndFileSource::set_destructive (bool yn)
{
if (yn) {
- _flags = Flag (_flags | Destructive);
+ _flags = Flag (_flags | Writable | Destructive);
if (!xfade_buf) {
xfade_buf = new Sample[xfade_frames];
}