Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
isv:hp:education
kdelibs3
kdemm-fix-leak.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File kdemm-fix-leak.diff of Package kdelibs3
--- arts/knotify/knotify.cpp +++ arts/knotify/knotify.cpp @@ -54,7 +54,6 @@ #include <kstandarddirs.h> #include <kuniqueapplication.h> #include <kwin.h> -#include <kdemm/simpleplayer.h> #include "knotify.h" #include "knotify.moc" @@ -131,11 +130,15 @@ d->externalPlayerProc = 0; d->useKDEMM = useKDEMM; - d->volume = 100; + d->inStartup = 0; + d->volume = 100; d->playTimer = 0; loadConfig(); + + connect ( this, SIGNAL(deletePlayObject(KDE::Multimedia::SimplePlayer*)), + SLOT(objectDeleter(KDE::Multimedia::SimplePlayer*)) ); } KNotify::~KNotify() @@ -513,20 +518,30 @@ void KNotify::playTimeout() { +qDebug("KNotify::playTimeout"); for( QMap< KDE::Multimedia::SimplePlayer*, int >::Iterator it = d->playObjectEventMap.begin(); it != d->playObjectEventMap.end(); ) { QMap< KDE::Multimedia::SimplePlayer*, int >::Iterator current = it; ++it; - if ( !current.key()->isPlaying() || current.key()->totalTime() <= 0 ) // may be "playing" even if there's an error + KDE::Multimedia::SimplePlayer* playObject = current.key(); + if ( !playObject->isPlaying() || playObject->totalTime() <= 0 ) // may be "playing" even if there's an error { soundFinished( *current, PlayedOK ); d->playObjectEventMap.remove( current ); + disconnect( playObject, SIGNAL( finished() ) ); + playObject->stop(); + emit deletePlayObject(playObject); } } if ( !d->playObjectEventMap.count() ) d->playTimer->stop(); +} + +void KNotify::objectDeleter( KDE::Multimedia::SimplePlayer *playObject ) +{ + delete playObject; } void KNotify::soundFinished( int eventId, PlayingFinishedStatus reason ) diff -urN --exclude=Makefile --exclude=.deps --exclude=.libs kdelibs-3.4.2/arts/knotify/knotify.h kdelibs-3.4.2.orig/arts/knotify/knotify.h --- arts/knotify/knotify.h +++ arts/knotify/knotify.h @@ -24,6 +24,8 @@ #include <knotifyclient.h> #include <dcopobject.h> +#include <kdemm/simpleplayer.h> + class KNotifyPrivate; class KProcess; @@ -95,6 +97,11 @@ private slots: void playTimeout(); void slotPlayerProcessExited( KProcess *proc ); + void objectDeleter( KDE::Multimedia::SimplePlayer* ); + +signals: + void deletePlayObject( KDE::Multimedia::SimplePlayer* ); + private: KNotifyPrivate* d; --- kdemm/simpleplayer.cpp.orig 2005-08-19 14:07:57.000000000 +0200 +++ kdemm/simpleplayer.cpp 2005-08-19 14:08:11.000000000 +0200 @@ -50,10 +50,12 @@ connect( Factory::self(), SIGNAL( recreateObjects() ), SLOT( recreateObjects() ) ); d->channel = Factory::self()->createChannel( KGlobal::instance()->aboutData()->programName() ); d->player = Factory::self()->createPlayer(); - d->player->setOutputChannel( d->channel ); - connect( d->player, SIGNAL( stateChanged( KDE::Multimedia::Player::State, KDE::Multimedia::Player::State ) ), + if ( d->player ) { + d->player->setOutputChannel( d->channel ); + connect( d->player, SIGNAL( stateChanged( KDE::Multimedia::Player::State, KDE::Multimedia::Player::State ) ), SLOT( stateChanged( KDE::Multimedia::Player::State, KDE::Multimedia::Player::State ) ) ); - connect( d->player, SIGNAL( finished() ), SIGNAL( finished() ) ); + connect( d->player, SIGNAL( finished() ), SIGNAL( finished() ) ); + }; } SimplePlayer::~SimplePlayer() @@ -64,6 +66,8 @@ void SimplePlayer::play( const KURL & url ) { + if( ! d->player ) + return; if( isPaused() && url == d->url ) { d->player->play(); @@ -78,51 +82,71 @@ void SimplePlayer::pause() { + if( ! d->player ) + return; d->player->pause(); } void SimplePlayer::stop() { + if( ! d->player ) + return; d->player->stop(); } long SimplePlayer::totalTime() const { + if( ! d->player ) + return 0; return d->player->totalTime(); } long SimplePlayer::currentTime() const { + if( ! d->player ) + return 0; return d->player->currentTime(); } void SimplePlayer::seek( long ms ) { + if( ! d->player ) + return; d->player->seek( ms ); } float SimplePlayer::volume() const { + if( ! d->player ) + return 0; return d->channel->volume(); } void SimplePlayer::setVolume( float v ) { + if( ! d->player ) + return; d->channel->setVolume( v ); } bool SimplePlayer::isPlaying() const { + if( ! d->player ) + return false; return ( d->player->state() == Player::Playing ); } bool SimplePlayer::isPaused() const { + if( ! d->player ) + return false; return ( d->player->state() == Player::Paused ); } void SimplePlayer::stateChanged( Player::State ns, Player::State os ) { + if( ! d->player ) + return; if( os == Player::Loading && ns == Player::Stopped ) d->player->play(); } @@ -135,7 +159,8 @@ d->title = d->channel->channelName(); d->type = d->channel->channelType(); - d->player->stop(); + if( d->player ) + d->player->stop(); delete d->player; delete d->channel; @@ -149,6 +174,9 @@ d->channel->setVolume( d->channelvolume ); d->player = Factory::self()->createPlayer(); + if( ! d->player ) + return; + d->player->setOutputChannel( d->channel ); if( d->state != Player::NoMedia ) --- kdemm/factory.cpp.orig 2005-08-19 14:07:48.000000000 +0200 +++ kdemm/factory.cpp 2005-08-19 14:08:11.000000000 +0200 @@ -80,6 +80,7 @@ ":\n" << e << endl; } } +#if 0 if( 0 == backend ) { if( offers.size() == 0 ) @@ -100,6 +101,7 @@ i18n( "Unable to use any of the available Multimedia Backends" ), details ); } } +#endif } Backend * backend;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor