WinRT: emit mediaStatus changes before state changes

This makes sure all mediaStatus changes are emitted, even when some
action is done on the media player as a result of a state change.
Also, when both mediaStatus and state are changed at the same time,
make sure both variables are updated before sending the
corresponding signals.

Task-number: QTBUG-49578
Change-Id: I8eed6692503bba1540070f6435b7ea1f5e25c023
Reviewed-by: Andrew Knight <andrew.knight@intopalo.com>
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Reviewed-by: Christian Stromme <christian.stromme@qt.io>
Reviewed-by: Maurice Kalinowski <maurice.kalinowski@qt.io>
This commit is contained in:
Yoann Lopes
2016-07-28 11:53:40 +02:00
parent b69862eb2a
commit c30eeb5b74

View File

@@ -263,18 +263,19 @@ public:
break; break;
} }
if (d->state != newState) {
d->state = newState;
emit q->stateChanged(d->state);
}
if (d->videoRenderer) if (d->videoRenderer)
d->videoRenderer->setActive(d->state == QMediaPlayer::PlayingState); d->videoRenderer->setActive(d->state == QMediaPlayer::PlayingState);
if (d->mediaStatus != newStatus) { const QMediaPlayer::MediaStatus oldMediaStatus = d->mediaStatus;
d->mediaStatus = newStatus; const QMediaPlayer::State oldState = d->state;
d->mediaStatus = newStatus;
d->state = newState;
if (d->mediaStatus != oldMediaStatus)
emit q->mediaStatusChanged(d->mediaStatus); emit q->mediaStatusChanged(d->mediaStatus);
}
if (d->state != oldState)
emit q->stateChanged(d->state);
return S_OK; return S_OK;
} }
@@ -855,17 +856,22 @@ void QWinRTMediaPlayerControl::stop()
{ {
Q_D(QWinRTMediaPlayerControl); Q_D(QWinRTMediaPlayerControl);
if (d->state != QMediaPlayer::StoppedState) { const QMediaPlayer::MediaStatus oldMediaStatus = d->mediaStatus;
d->state = QMediaPlayer::StoppedState; const QMediaPlayer::State oldState = d->state;
emit stateChanged(d->state);
} d->state = QMediaPlayer::StoppedState;
if (d->mediaStatus == QMediaPlayer::BufferedMedia if (d->mediaStatus == QMediaPlayer::BufferedMedia
|| d->mediaStatus == QMediaPlayer::BufferingMedia) { || d->mediaStatus == QMediaPlayer::BufferingMedia) {
d->mediaStatus = QMediaPlayer::LoadedMedia; d->mediaStatus = QMediaPlayer::LoadedMedia;
emit mediaStatusChanged(d->mediaStatus);
} }
if (d->mediaStatus != oldMediaStatus)
emit mediaStatusChanged(d->mediaStatus);
if (d->state != oldState)
emit stateChanged(d->state);
if (d->media.isNull() && d->stream.isNull()) if (d->media.isNull() && d->stream.isNull())
return; return;