fix crash when copy'ing latent plugins
[ardour.git] / libs / ardour / audio_playlist.cc
index 06d5f476a11881adaa9a917b48d5612b1f113ad4..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
 
@@ -152,7 +152,7 @@ struct ReadSorter {
 /** A segment of region that needs to be read */
 struct Segment {
        Segment (boost::shared_ptr<AudioRegion> r, Evoral::Range<framepos_t> a) : region (r), range (a) {}
-       
+
        boost::shared_ptr<AudioRegion> region; ///< the region
        Evoral::Range<framepos_t> range;       ///< range of the region to read, in session frames
 };
@@ -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,13 +492,13 @@ 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())) {
                                continue;
                        }
-                       
+
                        if ((p = (*i)->property (X_("in"))) == 0) {
                                continue;
                        }
@@ -537,7 +542,7 @@ AudioPlaylist::load_legacy_crossfades (const XMLNode& node, int version)
                                 */
 
                                const XMLNodeList c = (*i)->children ();
-                               
+
                                for (XMLNodeConstIterator j = c.begin(); j != c.end(); ++j) {
                                        if ((*j)->name() == X_("FadeOut")) {
                                                out_a->fade_out()->set_state (**j, version);
@@ -545,7 +550,7 @@ AudioPlaylist::load_legacy_crossfades (const XMLNode& node, int version)
                                                out_a->inverse_fade_out()->set_state (**j, version);
                                        }
                                }
-                               
+
                                out_a->set_fade_out_active (true);
 
                        } else {
@@ -555,7 +560,7 @@ AudioPlaylist::load_legacy_crossfades (const XMLNode& node, int version)
                                 */
 
                                const XMLNodeList c = (*i)->children ();
-                               
+
                                for (XMLNodeConstIterator j = c.begin(); j != c.end(); ++j) {
                                        if ((*j)->name() == X_("FadeIn")) {
                                                in_a->fade_in()->set_state (**j, version);
@@ -563,7 +568,7 @@ AudioPlaylist::load_legacy_crossfades (const XMLNode& node, int version)
                                                in_a->inverse_fade_in()->set_state (**j, version);
                                        }
                                }
-                               
+
                                in_a->set_fade_in_active (true);
                        }
                }