Version: 1.6 (KDE 3.1 RC2) (using KDE KDE 3.0.9) Installed from: Compiled From Sources Compiler: gcc 2.95.3 OS: Linux I apologize in advance for the odd circumstances of this bug. Anyway, I'm writing a lightweight media player and had much trouble using a dynamically loaded kaboodle component. The component worked, but for the life of me I was unable to capture state changes of KMediaPlayer::Player::State to notify my playlist to load the next file. So, with a grimace, I copied the code from kaboodle for the Player and Engine classes and whittled them down to do what I need them to do. Now, in doing so, I found an interesting bug. In the method snip: Kaboodle::Player::tickerTimeout() { if(engine->state() == Stop) { if ( uncompleted ) { stop(); if( isLooping() ) { play(); } else { emit completed(); uncompleted = false; } } } Notice the lines: emit completed() uncompleted = false; This is the source of much hair pulling on my part. If somebody were to connect the completed() signal to some logic which were to then call openURL() with a new file and then play(), the variable uncompleted will be set to true in play() but then back to false when the signal completed() returns. So, you'll have a playing track, but uncompleted will be false. So, when this track finishes, completed() will not be emitted. All I did to fix it was to switch the two lines.
I'll try to test this today.
One week and a bad cold later, I test it, and everything works fine. This change should be in KDE 3.1 whenever it comes out. Thanks... that completed signal was written for Kaboodle's quit on finished playing option, so it never got the kind of testing you've since done. :-)