diff --git a/ShadedDisplay.cpp b/ShadedDisplay.cpp index a784756..2cd569f 100644 --- a/ShadedDisplay.cpp +++ b/ShadedDisplay.cpp @@ -95,8 +95,11 @@ ShadedDisplay::setPlaytime (uint time) sec = (time / 1000) % 60; min = (time / 1000) / 60; - m_number->setNumber (min, 2); - m_number2->setNumber (sec, 2); + if (sec != m_number2->getNumber ()) { + m_number2->setNumber (sec, 2); + } else if (min != m_number->getNumber ()) { + m_number->setNumber (min, 2); + } } diff --git a/SmallNumberDisplay.h b/SmallNumberDisplay.h index 2bb9386..d7419ed 100644 --- a/SmallNumberDisplay.h +++ b/SmallNumberDisplay.h @@ -14,6 +14,7 @@ class SmallNumberDisplay : public PixWidget ~SmallNumberDisplay () { }; void setNumber (int num, int len); + int getNumber (void) const { return m_num; } public slots: void setPixmaps (Skin *skin); diff --git a/XMMSHandler.cpp b/XMMSHandler.cpp index 2d05018..ff07718 100644 --- a/XMMSHandler.cpp +++ b/XMMSHandler.cpp @@ -23,7 +23,7 @@ XMMSHandler *XMMSHandler::getInstance (void) return singleton; } -XMMSHandler::XMMSHandler () : sigc::trackable () +XMMSHandler::XMMSHandler () : QObject (), sigc::trackable () { m_xmmsc = new XMMSClient ("promoe"); } @@ -66,9 +66,16 @@ XMMSHandler::connect (const char *path) XMMSResult *xr = m_xmmsc->broadcast_playback_volume_changed (); xr->connect (sigc::mem_fun (this, &XMMSHandler::volume_changed)); + QObject::connect (&m_playtime_timer, SIGNAL (timeout ()), this, SLOT (restartPlaytime ())); + return true; } +void +XMMSHandler::restartPlaytime (void) +{ + m_playtime->restart (); +} void XMMSHandler::medialib_entry_changed (XMMSResultValue *res) @@ -151,7 +158,8 @@ XMMSHandler::playback_playtime (XMMSResultValue *res) emit playtimeChanged (i); - res->restart (); + m_playtime = res; + m_playtime_timer.start (500); } void diff --git a/XMMSHandler.h b/XMMSHandler.h index b8237d8..db5add2 100644 --- a/XMMSHandler.h +++ b/XMMSHandler.h @@ -7,6 +7,7 @@ #include #include +#include class XMMSHandler : public QObject, public sigc::trackable { Q_OBJECT @@ -48,6 +49,7 @@ class XMMSHandler : public QObject, public sigc::trackable { public slots: void setPlaytime (uint pos); + void restartPlaytime (void); void playlistClear () { delete m_xmmsc->playlist_clear (); } void play () { delete m_xmmsc->playback_start (); } @@ -77,6 +79,9 @@ class XMMSHandler : public QObject, public sigc::trackable { void getVolume (uint); private: + XMMSResultValue *m_playtime; + QTimer m_playtime_timer; + XMMSHandler (void); QHash PropDictToQHash (XMMSResultDict *res); QHash DictToQHash (XMMSResultDict *res);