summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--library/sound.cpp35
-rw-r--r--library/sound.h2
2 files changed, 35 insertions, 2 deletions
diff --git a/library/sound.cpp b/library/sound.cpp
index ee2aabc..d1e2388 100644
--- a/library/sound.cpp
+++ b/library/sound.cpp
@@ -102,6 +102,9 @@ static int WAVsoundDuration(const QString& filename)
}
class SoundData : public QSound {
+ Q_OBJECT
+signals:
+ void stopped();
public:
SoundData ( const QString& name ) :
QSound ( Resource::findSound ( name )),
@@ -133,11 +136,20 @@ public:
play();
}
- bool isFinished ( ) const
+ bool isFinished ( ) const
{
- return ( loopsleft == 0 );
+ return ( loopsleft == 0 );
}
+ /*
+ * non virtual reimplementation
+ * @internal
+ */
+ void killTimers() {
+ QObject::killTimers();
+ emit stopped();
+ }
+
private:
QString filename;
int loopsleft;
@@ -146,6 +158,21 @@ private:
#endif
+
+/*
+ * @internal
+ * Using sender() when the slot is called is unsafe!
+ *
+ * @param snd instance
+ * @param obj The QObject to be called
+ * @param slot connect SIGNAL(stopped()) to slot
+ */
+void register_qpe_sound_finished( Sound* snd, QObject* obj, const char* slot ) {
+#ifndef QT_NO_SOUND
+ QObject::connect(snd->d, SIGNAL(stopped()), obj, slot );
+#endif
+}
+
/*! Opens a wave sound file \a name for playing
* Resource is used for finding the file
**/
@@ -168,6 +195,7 @@ Sound::~Sound()
void Sound::play()
{
#ifndef QT_NO_SOUND
+ d->killTimers();
d->playLoop(1);
#endif
}
@@ -220,3 +248,6 @@ void Sound::soundAlarm()
\ingroup qtopiaemb
*/
+
+
+#include "sound.moc"
diff --git a/library/sound.h b/library/sound.h
index 9f35107..daef70f 100644
--- a/library/sound.h
+++ b/library/sound.h
@@ -22,8 +22,10 @@
class QString;
class SoundData;
+class QObject;
class Sound {
+ /*INTERNAL*/ friend void register_qpe_sound_finished( Sound*, QObject *obj, const char* slot);
public:
Sound(const QString& name);
~Sound();