Index: seekslider.cpp =================================================================== --- seekslider.cpp (revision 771149) +++ seekslider.cpp (working copy) @@ -39,6 +39,7 @@ { K_D(SeekSlider); connect(&d->slider, SIGNAL(valueChanged(int)), SLOT(_k_seek(int))); + connect(&d->slider, SIGNAL(sliderReleased()), SLOT(_k_sliderReleased())); setMediaObject(mo); } @@ -85,6 +86,9 @@ void SeekSliderPrivate::_k_seek(int msec) { if (!ticking && media) { + if (media->state() == Phonon::StoppedState) { + media->play(); + } media->seek(msec); } } @@ -137,6 +141,16 @@ iconLabel.setPixmap(icon.pixmap(iconSize, x ? QIcon::Normal : QIcon::Disabled)); } +void SeekSliderPrivate::_k_sliderReleased() +{ + if (media->state() == Phonon::StoppedState) { + setEnabled(false); + ticking = true; + slider.setValue(0); + ticking = false; + } +} + void SeekSliderPrivate::_k_stateChanged(State newstate) { if (!media || !media->isSeekable()) { @@ -155,6 +169,9 @@ setEnabled(true); break; case Phonon::StoppedState: + if (slider.isSliderDown()) { + break; + } case Phonon::LoadingState: case Phonon::ErrorState: setEnabled(false); Index: seekslider.h =================================================================== --- seekslider.h (revision 771149) +++ seekslider.h (working copy) @@ -138,6 +138,7 @@ Q_PRIVATE_SLOT(k_func(), void _k_tick(qint64)) Q_PRIVATE_SLOT(k_func(), void _k_length(qint64)) Q_PRIVATE_SLOT(k_func(), void _k_seekableChanged(bool)) + Q_PRIVATE_SLOT(k_func(), void _k_sliderReleased()) }; } // namespace Phonon Index: seekslider_p.h =================================================================== --- seekslider_p.h (revision 771149) +++ seekslider_p.h (working copy) @@ -72,6 +72,7 @@ void _k_tick(qint64); void _k_length(qint64); void _k_seekableChanged(bool); + void _k_sliderReleased(); QBoxLayout layout; QSlider slider;