summaryrefslogtreecommitdiff
Unidiff
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)
102} 102}
103 103
104class SoundData : public QSound { 104class SoundData : public QSound {
105 Q_OBJECT
106signals:
107 void stopped();
105public: 108public:
106 SoundData ( const QString& name ) : 109 SoundData ( const QString& name ) :
107 QSound ( Resource::findSound ( name )), 110 QSound ( Resource::findSound ( name )),
@@ -133,11 +136,20 @@ public:
133 play(); 136 play();
134 } 137 }
135 138
136 bool isFinished ( ) const 139 bool isFinished ( ) const
137 { 140 {
138 return ( loopsleft == 0 ); 141 return ( loopsleft == 0 );
139 } 142 }
140 143
144 /*
145 * non virtual reimplementation
146 * @internal
147 */
148 void killTimers() {
149 QObject::killTimers();
150 emit stopped();
151 }
152
141private: 153private:
142 QString filename; 154 QString filename;
143 int loopsleft; 155 int loopsleft;
@@ -146,6 +158,21 @@ private:
146 158
147#endif 159#endif
148 160
161
162/*
163 * @internal
164 * Using sender() when the slot is called is unsafe!
165 *
166 * @param snd instance
167 * @param obj The QObject to be called
168 * @param slot connect SIGNAL(stopped()) to slot
169 */
170void register_qpe_sound_finished( Sound* snd, QObject* obj, const char* slot ) {
171#ifndef QT_NO_SOUND
172 QObject::connect(snd->d, SIGNAL(stopped()), obj, slot );
173#endif
174}
175
149/*! Opens a wave sound file \a name for playing 176/*! Opens a wave sound file \a name for playing
150 * Resource is used for finding the file 177 * Resource is used for finding the file
151 **/ 178 **/
@@ -168,6 +195,7 @@ Sound::~Sound()
168void Sound::play() 195void Sound::play()
169{ 196{
170#ifndef QT_NO_SOUND 197#ifndef QT_NO_SOUND
198 d->killTimers();
171 d->playLoop(1); 199 d->playLoop(1);
172#endif 200#endif
173} 201}
@@ -220,3 +248,6 @@ void Sound::soundAlarm()
220 248
221 \ingroup qtopiaemb 249 \ingroup qtopiaemb
222*/ 250*/
251
252
253#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 @@
22 22
23class QString; 23class QString;
24class SoundData; 24class SoundData;
25class QObject;
25 26
26class Sound { 27class Sound {
28 /*INTERNAL*/ friend void register_qpe_sound_finished( Sound*, QObject *obj, const char* slot);
27public: 29public:
28 Sound(const QString& name); 30 Sound(const QString& name);
29 ~Sound(); 31 ~Sound();