summaryrefslogtreecommitdiffstats
path: root/src/runtime/q3dsslideplayer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtime/q3dsslideplayer.cpp')
-rw-r--r--src/runtime/q3dsslideplayer.cpp14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/runtime/q3dsslideplayer.cpp b/src/runtime/q3dsslideplayer.cpp
index 2db55f3..0388ab1 100644
--- a/src/runtime/q3dsslideplayer.cpp
+++ b/src/runtime/q3dsslideplayer.cpp
@@ -728,9 +728,17 @@ void Q3DSSlidePlayer::sendPositionChanged(Q3DSSlide *slide, float pos)
if (!qFuzzyCompare(oldPosition, pos))
Q_EMIT positionChanged(pos);
- const bool onEOS = (m_data.state == PlayerState::Playing && m_data.pendingState == PlayerState::Playing)
- && ((m_data.position == 0.0f && m_data.playbackRate < 0.0f)
- || (m_data.position == duration() && m_data.playbackRate > 0.0f));
+ // Check if we are close enough to the end of playback that we
+ // are unlikely to get another position change
+ float timeLeft = 0.0f;
+ if (m_data.playbackRate < 0.0f)
+ timeLeft = m_data.position;
+ else
+ timeLeft = qMax(0.0f, duration() - m_data.position);
+
+ const bool onEOS = m_data.state == PlayerState::Playing
+ && m_data.pendingState == PlayerState::Playing
+ && timeLeft < 0.1f;
if (onEOS)
onSlideFinished(slide);