diff options
| author | Peter Penz <[email protected]> | 2009-01-31 13:04:40 +0000 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2009-01-31 13:04:40 +0000 |
| commit | e5edeb7446c0ec60d0962fb5cd0077c374a472ef (patch) | |
| tree | 98377f3f501beb62ddcee3bf1a706153ff557e78 /src | |
| parent | 68a7ed8bcfafe36676ddb43a5de426a6f600a05d (diff) | |
Postpone the creating of the media object until the play- or stop-button has been pressed. This solves the issue that Dolphin might get blocked during hovering media files. Dolphin still gets blocked when requesting a media object the first time, but for the user this "just" means that after pressing the play-button the first time, that the playing starts a little bit later.
CCMAIL: [email protected]
CCMAIL: [email protected]
svn path=/trunk/KDE/kdebase/apps/; revision=919063
Diffstat (limited to 'src')
| -rw-r--r-- | src/panels/information/phononwidget.cpp | 41 | ||||
| -rw-r--r-- | src/panels/information/phononwidget.h | 9 |
2 files changed, 41 insertions, 9 deletions
diff --git a/src/panels/information/phononwidget.cpp b/src/panels/information/phononwidget.cpp index d52ae9d8a..d27b78a3c 100644 --- a/src/panels/information/phononwidget.cpp +++ b/src/panels/information/phononwidget.cpp @@ -31,7 +31,11 @@ PhononWidget::PhononWidget(QWidget *parent) : QWidget(parent), - m_media(0) + m_url(), + m_playButton(0), + m_stopButton(0), + m_media(0), + m_seekSlider(0) { QHBoxLayout *innerLayout = new QHBoxLayout(this); innerLayout->setMargin(0); @@ -46,24 +50,22 @@ PhononWidget::PhononWidget(QWidget *parent) m_playButton->setToolTip(i18n("play")); m_playButton->setIconSize(QSize(16, 16)); m_playButton->setIcon(KIcon("media-playback-start")); + connect(m_playButton, SIGNAL(clicked()), this, SLOT(play())); + m_stopButton->setToolTip(i18n("stop")); m_stopButton->setIconSize(QSize(16, 16)); m_stopButton->setIcon(KIcon("media-playback-stop")); m_stopButton->hide(); + connect(m_stopButton, SIGNAL(clicked()), this, SLOT(stop())); + m_seekSlider->setIconVisible(false); } void PhononWidget::setUrl(const KUrl &url) { + m_url = url; if (m_media) { m_media->setCurrentSource(url); - } else { - m_media = Phonon::createPlayer(Phonon::MusicCategory, url); - m_media->setParent(this); - connect(m_playButton, SIGNAL(clicked()), m_media, SLOT(play())); - connect(m_stopButton, SIGNAL(clicked()), m_media, SLOT(stop())); - connect(m_media, SIGNAL(stateChanged(Phonon::State, Phonon::State)), SLOT(stateChanged(Phonon::State))); - m_seekSlider->setMediaObject(m_media); } } @@ -83,3 +85,26 @@ void PhononWidget::stateChanged(Phonon::State newstate) } setUpdatesEnabled(true); } + +void PhononWidget::play() +{ + requestMedia(); + m_media->play(); +} + +void PhononWidget::stop() +{ + requestMedia(); + m_media->stop(); +} + +void PhononWidget::requestMedia() +{ + if (!m_media) { + m_media = Phonon::createPlayer(Phonon::MusicCategory, m_url); + m_media->setParent(this); + connect(m_media, SIGNAL(stateChanged(Phonon::State, Phonon::State)), SLOT(stateChanged(Phonon::State))); + m_seekSlider->setMediaObject(m_media); + } +} + diff --git a/src/panels/information/phononwidget.h b/src/panels/information/phononwidget.h index 5c43e7e49..320ecbe6d 100644 --- a/src/panels/information/phononwidget.h +++ b/src/panels/information/phononwidget.h @@ -21,6 +21,8 @@ #ifndef PHONONWIDGET_H #define PHONONWIDGET_H +#include <kurl.h> + #include <QtGui/QWidget> #include <Phonon/Global> @@ -32,7 +34,6 @@ namespace Phonon } // namespace Phonon class QToolButton; -class KUrl; class PhononWidget : public QWidget { @@ -43,8 +44,14 @@ class PhononWidget : public QWidget private slots: void stateChanged(Phonon::State); + void play(); + void stop(); + + private: + void requestMedia(); private: + KUrl m_url; QToolButton *m_playButton; QToolButton *m_stopButton; Phonon::MediaObject *m_media; |
