summaryrefslogtreecommitdiff
path: root/src/wx/timing_panel.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2020-02-28 12:31:40 +0100
committerCarl Hetherington <cth@carlh.net>2020-02-28 12:31:40 +0100
commit746aa7337ac2d51a4fa09039c1d5d7717cc880fa (patch)
treefe4c64017d13fc219c460762c9520288aadb2a70 /src/wx/timing_panel.cc
parent03b9ef36942b2d3e0b2054f465bcbe8e029069b2 (diff)
Fix incorrect results when applying some timing operations to
more than one piece of content at once (e.g. trim start).
Diffstat (limited to 'src/wx/timing_panel.cc')
-rw-r--r--src/wx/timing_panel.cc10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/wx/timing_panel.cc b/src/wx/timing_panel.cc
index 739cf253d..184356a20 100644
--- a/src/wx/timing_panel.cc
+++ b/src/wx/timing_panel.cc
@@ -55,6 +55,7 @@ TimingPanel::TimingPanel (ContentPanel* p, weak_ptr<FilmViewer> viewer)
/// TRANSLATORS: translate the word "Timing" here; do not include the "Timing|" prefix
: ContentSubPanel (p, S_("Timing|Timing"))
, _viewer (viewer)
+ , _film_content_changed_suspender (boost::bind(&TimingPanel::film_content_changed, this, _1))
{
wxSize size = TimecodeBase::size (this);
@@ -256,6 +257,10 @@ TimingPanel::update_play_length ()
void
TimingPanel::film_content_changed (int property)
{
+ if (_film_content_changed_suspender.check(property)) {
+ return;
+ }
+
int const film_video_frame_rate = _parent->film()->video_frame_rate ();
/* Here we check to see if we have exactly one different value of various
@@ -405,7 +410,7 @@ TimingPanel::trim_start_changed ()
optional<FrameRateChange> ref_frc;
optional<DCPTime> ref_ph;
-
+ Suspender::Block bl = _film_content_changed_suspender.block ();
BOOST_FOREACH (shared_ptr<Content> i, _parent->selected ()) {
if (i->position() <= ph && ph < i->end(_parent->film())) {
/* The playhead is in i. Use it as a reference to work out
@@ -438,6 +443,7 @@ TimingPanel::trim_end_changed ()
fv->set_coalesce_player_changes (true);
+ Suspender::Block bl = _film_content_changed_suspender.block ();
BOOST_FOREACH (shared_ptr<Content> i, _parent->selected ()) {
ContentTime const trim = _trim_end->get (i->video_frame_rate().get_value_or(_parent->film()->video_frame_rate()));
i->set_trim_end (trim);
@@ -455,6 +461,7 @@ void
TimingPanel::play_length_changed ()
{
DCPTime const play_length = _play_length->get (_parent->film()->video_frame_rate());
+ Suspender::Block bl = _film_content_changed_suspender.block ();
BOOST_FOREACH (shared_ptr<Content> i, _parent->selected ()) {
FrameRateChange const frc = _parent->film()->active_frame_rate_change (i->position ());
i->set_trim_end (
@@ -491,6 +498,7 @@ TimingPanel::set_video_frame_rate ()
if (_video_frame_rate->GetValue() != wxT("")) {
fr = locale_convert<double> (wx_to_std (_video_frame_rate->GetValue ()));
}
+ Suspender::Block bl = _film_content_changed_suspender.block ();
BOOST_FOREACH (shared_ptr<Content> i, _parent->selected ()) {
if (fr) {
i->set_video_frame_rate (*fr);