summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2019-04-26 22:31:24 +0100
committerCarl Hetherington <cth@carlh.net>2019-04-26 22:31:24 +0100
commitaafa1cc676b6bd4d333f0ff3a09e1effabf979c3 (patch)
tree52bd25097ea5131338c0b3c62a37dffa265cea2b /src
parente7e7035f800accbb09ac99aa26d15bff22588d0b (diff)
Make sure at least one position change event is emitted after
a timeline drag (with frequent=false), even if lots have been sent with frequent=true. Otherwise the code in the CHNAGE_TYPE_DONE branch of Butler::player_change never gets to seek (since frequent is true, it ignores the signal). Without the seek things go wrong. Believed to fix #1534.
Diffstat (limited to 'src')
-rw-r--r--src/lib/content.cc4
-rw-r--r--src/lib/content.h2
-rw-r--r--src/wx/timeline.cc11
-rw-r--r--src/wx/timeline.h4
4 files changed, 13 insertions, 8 deletions
diff --git a/src/lib/content.cc b/src/lib/content.cc
index ca76b01a6..2ca029d5a 100644
--- a/src/lib/content.cc
+++ b/src/lib/content.cc
@@ -211,7 +211,7 @@ Content::signal_change (ChangeType c, int p)
}
void
-Content::set_position (shared_ptr<const Film> film, DCPTime p)
+Content::set_position (shared_ptr<const Film> film, DCPTime p, bool force_emit)
{
/* video and audio content can modify its position */
@@ -227,7 +227,7 @@ Content::set_position (shared_ptr<const Film> film, DCPTime p)
{
boost::mutex::scoped_lock lm (_mutex);
- if (p == _position) {
+ if (p == _position && !force_emit) {
cc.abort ();
return;
}
diff --git a/src/lib/content.h b/src/lib/content.h
index 96359fadb..4c1d55765 100644
--- a/src/lib/content.h
+++ b/src/lib/content.h
@@ -135,7 +135,7 @@ public:
return _digest;
}
- void set_position (boost::shared_ptr<const Film> film, DCPTime);
+ void set_position (boost::shared_ptr<const Film> film, DCPTime, bool force_emit = false);
/** DCPTime that this content starts; i.e. the time that the first
* bit of the content (trimmed or not) will happen.
diff --git a/src/wx/timeline.cc b/src/wx/timeline.cc
index 1c1da708e..de5f05ae7 100644
--- a/src/wx/timeline.cc
+++ b/src/wx/timeline.cc
@@ -568,7 +568,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 +709,7 @@ Timeline::maybe_snap (DCPTime a, DCPTime b, optional<DCPTime>& 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 +768,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);
}
diff --git a/src/wx/timeline.h b/src/wx/timeline.h
index 89fd94179..a7f345863 100644
--- a/src/wx/timeline.h
+++ b/src/wx/timeline.h
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2013-2018 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2013-2019 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
@@ -95,7 +95,7 @@ private:
void film_content_change (ChangeType type, int, bool frequent);
void resized ();
void assign_tracks ();
- void set_position_from_event (wxMouseEvent &);
+ void set_position_from_event (wxMouseEvent& ev, bool force_emit = false);
void clear_selection ();
void recreate_views ();
void setup_scrollbars ();