X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Ftimeline.cc;h=2c510efb5bc2ebe08760e494c2cb8c057d0dd744;hb=7ba45cd9b7b5b04a19851bbc9b8533afe7ff1bab;hp=206c13cf69e64fa15a00316dfff917de9d9304a0;hpb=254b3044d72de6b033d7c584f5abd2b9aa70aad5;p=dcpomatic.git diff --git a/src/wx/timeline.cc b/src/wx/timeline.cc index 206c13cf6..2c510efb5 100644 --- a/src/wx/timeline.cc +++ b/src/wx/timeline.cc @@ -54,6 +54,7 @@ using boost::weak_ptr; using boost::dynamic_pointer_cast; using boost::bind; using boost::optional; +using namespace dcpomatic; /* 3 hours in 640 pixels */ double const Timeline::_minimum_pixels_per_second = 640.0 / (60 * 60 * 3); @@ -256,7 +257,7 @@ Timeline::film_content_change (ChangeType type, int property, bool frequent) ensure_ui_thread (); - if (property == AudioContentProperty::STREAMS) { + if (property == AudioContentProperty::STREAMS || property == VideoContentProperty::FRAME_TYPE) { recreate_views (); } else if (property == ContentProperty::POSITION || property == ContentProperty::LENGTH) { _reels_view->force_redraw (); @@ -531,7 +532,7 @@ Timeline::left_down_select (wxMouseEvent& ev) _start_snaps.push_back (cv->content()->end(film)); _end_snaps.push_back (cv->content()->end(film)); - BOOST_FOREACH (DCPTime i, cv->content()->reel_split_points()) { + BOOST_FOREACH (DCPTime i, cv->content()->reel_split_points(film)) { _start_snaps.push_back (i); } } @@ -568,7 +569,12 @@ Timeline::left_up_select (wxMouseEvent& ev) } _content_panel->set_selection (selected_content ()); - set_position_from_event (ev); + /* Since we may have just set change signals back to `not-frequent', we have to + make sure this position change is signalled, even if the position value has + not changed since the last time it was set (with frequent=true). This is + a bit of a hack. + */ + set_position_from_event (ev, true); /* Clear up up the stuff we don't do during drag */ assign_tracks (); @@ -704,7 +710,7 @@ Timeline::maybe_snap (DCPTime a, DCPTime b, optional& nearest_distance) } void -Timeline::set_position_from_event (wxMouseEvent& ev) +Timeline::set_position_from_event (wxMouseEvent& ev, bool force_emit) { if (!_pixels_per_second) { return; @@ -763,7 +769,7 @@ Timeline::set_position_from_event (wxMouseEvent& ev) new_position = DCPTime (); } - _down_view->content()->set_position (film, new_position); + _down_view->content()->set_position (film, new_position, force_emit); film->set_sequence (false); }