fix crash when copy'ing latent plugins
[ardour.git] / libs / ardour / audio_playlist.cc
index 0553206367676e1ecb261e6bd657f697cc0230a8..b00252df7412de461b073557d4bc974462ebde2f 100644 (file)
@@ -28,7 +28,7 @@
 #include "ardour/region_sorters.h"
 #include "ardour/session.h"
 
-#include "i18n.h"
+#include "pbd/i18n.h"
 
 using namespace ARDOUR;
 using namespace std;
@@ -38,7 +38,7 @@ AudioPlaylist::AudioPlaylist (Session& session, const XMLNode& node, bool hidden
        : Playlist (session, node, DataType::AUDIO, hidden)
 {
 #ifndef NDEBUG
-       const XMLProperty* prop = node.property("type");
+       XMLProperty const * prop = node.property("type");
        assert(!prop || DataType(prop->value()) == DataType::AUDIO);
 #endif
 
@@ -335,6 +335,11 @@ AudioPlaylist::region_changed (const PropertyChange& what_changed, boost::shared
                return false;
        }
 
+       PropertyChange bounds;
+       bounds.add (Properties::start);
+       bounds.add (Properties::position);
+       bounds.add (Properties::length);
+
        PropertyChange our_interests;
 
        our_interests.add (Properties::fade_in_active);
@@ -348,8 +353,8 @@ AudioPlaylist::region_changed (const PropertyChange& what_changed, boost::shared
        bool parent_wants_notify;
 
        parent_wants_notify = Playlist::region_changed (what_changed, region);
-
-       if (parent_wants_notify || (what_changed.contains (our_interests))) {
+       /* if bounds changed, we have already done notify_contents_changed ()*/
+       if ((parent_wants_notify || what_changed.contains (our_interests)) && !what_changed.contains (bounds)) {
                notify_contents_changed ();
        }
 
@@ -487,7 +492,7 @@ AudioPlaylist::load_legacy_crossfades (const XMLNode& node, int version)
        for (XMLNodeConstIterator i = children.begin(); i != children.end(); ++i) {
                if ((*i)->name() == X_("Crossfade")) {
 
-                       XMLProperty* p = (*i)->property (X_("active"));
+                       XMLProperty const * p = (*i)->property (X_("active"));
                        assert (p);
 
                        if (!string_is_affirmative (p->value())) {