diff --git a/src/libtomahawk/audio/AudioEngine.cpp b/src/libtomahawk/audio/AudioEngine.cpp index 9a918d334..16849d37f 100644 --- a/src/libtomahawk/audio/AudioEngine.cpp +++ b/src/libtomahawk/audio/AudioEngine.cpp @@ -80,6 +80,10 @@ AudioEngine::AudioEngine() connect( m_audioOutput, SIGNAL( volumeChanged( qreal ) ), SLOT( onVolumeChanged( qreal ) ) ); + m_stateQueueTimer.setInterval( 5000 ); + m_stateQueueTimer.setSingleShot( true ); + connect( &m_stateQueueTimer, SIGNAL( timeout() ), SLOT( queueStateSafety() ) ); + onVolumeChanged( m_audioOutput->volume() ); #ifndef Q_WS_X11 @@ -867,17 +871,29 @@ AudioEngine::checkStateQueue() } +void +AudioEngine::queueStateSafety() +{ + tDebug() << Q_FUNC_INFO; + m_stateQueue.clear(); +} + + void AudioEngine::queueState( AudioState state ) { - tDebug() << "Enqueuing state command:" << state << m_stateQueue.count(); + if ( m_stateQueueTimer.isActive() ) + m_stateQueueTimer.stop(); + tDebug() << "Enqueuing state command:" << state << m_stateQueue.count(); m_stateQueue.enqueue( state ); if ( m_stateQueue.count() == 1 ) { checkStateQueue(); } + + m_stateQueueTimer.start(); } diff --git a/src/libtomahawk/audio/AudioEngine.h b/src/libtomahawk/audio/AudioEngine.h index 040552c15..79848a736 100644 --- a/src/libtomahawk/audio/AudioEngine.h +++ b/src/libtomahawk/audio/AudioEngine.h @@ -137,6 +137,8 @@ private slots: void onPlaylistNextTrackReady(); void sendWaitingNotification() const; + + void queueStateSafety(); private: void checkStateQueue(); @@ -169,6 +171,7 @@ private: AudioState m_state; QQueue< AudioState > m_stateQueue; + QTimer m_stateQueueTimer; static AudioEngine* s_instance; };