Forward-port 99% crash fix from 1.x.
[dcpomatic.git] / src / lib / playlist.cc
index 22412da4a3640b5313cd6d75cdb25422a4ee08f6..1698da99ef25ace321b80954c8a4239a7105090b 100644 (file)
@@ -62,6 +62,12 @@ Playlist::~Playlist ()
 void
 Playlist::content_changed (weak_ptr<Content> content, int property, bool frequent)
 {
+       /* Don't respond to position changes here, as:
+          - sequencing after earlier/later changes is handled by move_earlier/move_later
+          - any other position changes will be timeline drags which should not result in content
+          being sequenced.
+       */
+       
        if (property == ContentProperty::LENGTH || property == VideoContentProperty::VIDEO_FRAME_TYPE) {
                maybe_sequence_video ();
        }
@@ -361,7 +367,7 @@ Playlist::move_earlier (shared_ptr<Content> c)
                ++i;
        }
 
-       assert (i != _content.end ());
+       DCPOMATIC_ASSERT (i != _content.end ());
        if (previous == _content.end ()) {
                return;
        }
@@ -383,7 +389,7 @@ Playlist::move_later (shared_ptr<Content> c)
                ++i;
        }
 
-       assert (i != _content.end ());
+       DCPOMATIC_ASSERT (i != _content.end ());
 
        ContentList::iterator next = i;
        ++next;
@@ -393,6 +399,6 @@ Playlist::move_later (shared_ptr<Content> c)
        }
 
        (*next)->set_position (c->position ());
-       c->set_position (c->position() + c->length_after_trim ());
+       c->set_position (c->position() + (*next)->length_after_trim ());
        sort (_content.begin(), _content.end(), ContentSorter ());
 }