summaryrefslogtreecommitdiffstats
path: root/opensuse/core/tdelibs/kdemm.diff
diff options
context:
space:
mode:
authorRobert Xu <robxu9@gmail.com>2011-11-10 18:04:39 -0500
committerRobert Xu <robxu9@gmail.com>2011-11-10 18:04:39 -0500
commit21fcfa3348213aa87f0e3aef62ca4720c6d31cb7 (patch)
tree2cfb64c59322628e613ed0895e3c3694d3abe6bd /opensuse/core/tdelibs/kdemm.diff
parent8667643bff14a60d8571c599efd3e48bed3e3b12 (diff)
downloadtde-packaging-21fcfa3348213aa87f0e3aef62ca4720c6d31cb7.tar.gz
tde-packaging-21fcfa3348213aa87f0e3aef62ca4720c6d31cb7.zip
initial commit to suse branch: eclipse integration
Diffstat (limited to 'opensuse/core/tdelibs/kdemm.diff')
-rw-r--r--opensuse/core/tdelibs/kdemm.diff669
1 files changed, 669 insertions, 0 deletions
diff --git a/opensuse/core/tdelibs/kdemm.diff b/opensuse/core/tdelibs/kdemm.diff
new file mode 100644
index 000000000..3d1e3d925
--- /dev/null
+++ b/opensuse/core/tdelibs/kdemm.diff
@@ -0,0 +1,669 @@
+Index: arts/knotify/knotify.cpp
+===================================================================
+--- arts/knotify/knotify.cpp.orig
++++ arts/knotify/knotify.cpp
+@@ -5,6 +5,7 @@
+ 2000 Matthias Ettrich (ettrich@kde.org)
+ 2000 Waldo Bastian <bastian@kde.org>
+ 2000-2003 Carsten Pfeiffer <pfeiffer@kde.org>
++ 2004 Allan Sandfeld Jensen <kde@carewolf.com>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+@@ -26,21 +27,12 @@
+ #include <sys/types.h>
+ #include <sys/stat.h>
+
+-#include <config.h>
+-#ifndef WITHOUT_ARTS
+-// aRts headers
+-#include <connect.h>
+-#include <dispatcher.h>
+-#include <flowsystem.h>
+-#include <qiomanager.h>
+-#include <soundserver.h>
+-#endif
+-
+ // QT headers
+ #include <qfile.h>
+ #include <qfileinfo.h>
+ #include <qstringlist.h>
+ #include <qtextstream.h>
++#include <qtimer.h>
+
+ // KDE headers
+ #include <dcopclient.h>
+@@ -80,15 +72,11 @@ public:
+ QString externalPlayer;
+ KProcess *externalPlayerProc;
+
+-#ifndef WITHOUT_ARTS
+- QPtrList<KDE::PlayObject> playObjects;
+- QMap<KDE::PlayObject*,int> playObjectEventMap;
+- KAudioManagerPlay *audioManager;
+-#endif
++ QMap<KDE::Multimedia::SimplePlayer*,int> playObjectEventMap;
+ int externalPlayerEventId;
+
+ bool useExternal;
+- bool useArts;
++ bool useKDEMM;
+ int volume;
+ QTimer *playTimer;
+ bool inStartup;
+@@ -106,12 +94,13 @@ extern "C"{
+ KDE_EXPORT int kdemain(int argc, char **argv)
+ {
+ KAboutData aboutdata("knotify", I18N_NOOP("KNotify"),
+- "3.0", I18N_NOOP("KDE Notification Server"),
++ "4.0", I18N_NOOP("KDE Notification Server"),
+ KAboutData::License_GPL, "(C) 1997-2003, KDE Developers");
+ aboutdata.addAuthor("Carsten Pfeiffer",I18N_NOOP("Current Maintainer"),"pfeiffer@kde.org");
+ aboutdata.addAuthor("Christian Esken",0,"esken@kde.org");
+ aboutdata.addAuthor("Stefan Westerfeld",I18N_NOOP("Sound support"),"stefan@space.twc.de");
+ aboutdata.addAuthor("Charles Samuels",I18N_NOOP("Previous Maintainer"),"charles@kde.org");
++ aboutdata.addAuthor("Allan Sandfeld Jensen",I18N_NOOP("Conversion to KDEMM"),"kde@carewolf.com");
+
+ KCmdLineArgs::init( argc, argv, &aboutdata );
+ KUniqueApplication::addCmdLineOptions();
+@@ -126,145 +115,36 @@ KDE_EXPORT int kdemain(int argc, char **
+ KUniqueApplication app;
+ app.disableSessionManagement();
+
+- // KNotify is started on KDE startup and on demand (using
+- // KNotifClient::startDaemon()) whenever a KNotify event occurs. Especially
+- // KWin may fire many events (e.g. when a window pops up). When we have
+- // problems with aRts or the installation, we might get an infinite loop
+- // of knotify crashing, popping up the crashhandler window and kwin firing
+- // another event, starting knotify again...
+- // We try to prevent this by tracking our startup and offer options to
+- // abort this.
+-
+-#ifndef WITHOUT_ARTS
+- KConfigGroup config( KGlobal::config(), "StartProgress" );
+- KConfig artsKCMConfig( "kcmartsrc" );
+- artsKCMConfig.setGroup( "Arts" );
+- bool useArts = artsKCMConfig.readBoolEntry( "StartServer", true );
+- if (useArts)
+- useArts = config.readBoolEntry( "Use Arts", useArts );
+- bool ok = config.readBoolEntry( "Arts Init", true );
+-
+- if ( useArts && !ok )
+- {
+- if ( KMessageBox::questionYesNo(
+- 0L,
+- i18n("During the previous startup, KNotify crashed while creating "
+- "Arts::Dispatcher. Do you want to try again or disable "
+- "aRts sound output?\n\n"
+- "If you choose to disable aRts output now, you can re-enable "
+- "it later or select an alternate sound player "
+- "in the System Notifications control panel."),
+- i18n("KNotify Problem"),
+- i18n("&Try Again"),
+- i18n("D&isable aRts Output"),
+- "KNotifyStartProgress",
+- 0 /* don't call KNotify :) */
+- )
+- == KMessageBox::No )
+- {
+- useArts = false;
+- }
+- }
+-
+- // when ArtsDispatcher crashes, we know it the next start.
+- config.writeEntry( "Arts Init", false );
+- config.writeEntry( "Use Arts", useArts );
+- config.sync();
+-
+- KArtsDispatcher *dispatcher = 0;
+- if ( useArts )
+- {
+- dispatcher = new KArtsDispatcher;
+- soundServer = new KArtsServer;
+- }
+-
+- // ok, seemed to work.
+- config.writeEntry("Arts Init", useArts );
+- config.sync();
+-
+- ok = config.readBoolEntry( "KNotify Init", true );
+- if ( useArts && !ok )
+- {
+- if ( KMessageBox::questionYesNo(
+- 0L,
+- i18n("During the previous startup, KNotify crashed while instantiating "
+- "KNotify. Do you want to try again or disable "
+- "aRts sound output?\n\n"
+- "If you choose to disable aRts output now, you can re-enable "
+- "it later or select an alternate sound player "
+- "in the System Notifications control panel."),
+- i18n("KNotify Problem"),
+- i18n("&Try Again"),
+- i18n("D&isable aRts Output"),
+- "KNotifyStartProgress",
+- 0 /* don't call KNotify :) */
+- )
+- == KMessageBox::No )
+- {
+- useArts = false;
+- delete soundServer;
+- soundServer = 0L;
+- delete dispatcher;
+- dispatcher = 0L;
+- }
+- }
+-
+- // when KNotify instantiation crashes, we know it the next start.
+- config.writeEntry( "KNotify Init", false );
+- config.writeEntry( "Use Arts", useArts );
+- config.sync();
+-
+ // start notify service
+- KNotify *notify = new KNotify( useArts );
+-
+- config.writeEntry( "KNotify Init", true );
+- config.sync();
+-
+-#else
+-
+- // start notify service, without aRts
+- KNotify *notify = new KNotify( false );
+-
+-#endif
++ KNotify notify( true );
+
+ app.dcopClient()->setDefaultObject( "Notify" );
+ app.dcopClient()->setDaemonMode( true );
+ // kdDebug() << "knotify starting" << endl;
+
+ int ret = app.exec();
+- delete notify;
+-#ifndef WITHOUT_ARTS
+- delete soundServer;
+- delete dispatcher;
+-#endif
+ return ret;
+ }
+ }// end extern "C"
+
+-KNotify::KNotify( bool useArts )
++KNotify::KNotify( bool useKDEMM )
+ : QObject(), DCOPObject("Notify")
+ {
+ d = new KNotifyPrivate;
+ d->globalEvents = new KConfig("knotify/eventsrc", true, false, "data");
+ d->globalConfig = new KConfig("knotify.eventsrc", true, false);
+ d->externalPlayerProc = 0;
+- d->useArts = useArts;
+- d->inStartup = true;
+-#ifndef WITHOUT_ARTS
+- d->playObjects.setAutoDelete(true);
+- d->audioManager = 0;
+- if( useArts )
+- {
+- connect( soundServer, SIGNAL( restartedServer() ), this, SLOT( restartedArtsd() ) );
+- restartedArtsd(); //started allready need to initialize d->audioManager
+- }
+-#endif
++ 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()
+@@ -272,12 +152,9 @@ KNotify::~KNotify()
+ reconfigure();
+
+ #ifndef WITHOUT_ARTS
+- d->playObjects.clear();
+-
+ delete d->globalEvents;
+ delete d->globalConfig;
+ delete d->externalPlayerProc;
+- delete d->audioManager;
+ #endif
+ delete d;
+ }
+@@ -293,7 +170,7 @@ void KNotify::loadConfig() {
+ // try to locate a suitable player if none is configured
+ if ( d->externalPlayer.isEmpty() ) {
+ QStringList players;
+- players << "wavplay" << "aplay" << "auplay";
++ players << "wavplay" << "aplay" << "auplay" << "artsplay" << "akodeplay";
+ QStringList::Iterator it = players.begin();
+ while ( d->externalPlayer.isEmpty() && it != players.end() ) {
+ d->externalPlayer = KStandardDirs::findExe( *it );
+@@ -456,9 +333,9 @@ bool KNotify::notifyBySound( const QStri
+ if ( soundFile.isEmpty() )
+ soundFile = locate( "sound", sound );
+ }
+- if ( soundFile.isEmpty() || isPlaying( soundFile ) )
++ if ( soundFile.isEmpty() )
+ {
+- soundFinished( eventId, soundFile.isEmpty() ? NoSoundFile : FileAlreadyPlaying );
++ soundFinished( eventId, NoSoundFile );
+ return false;
+ }
+
+@@ -466,64 +343,18 @@ bool KNotify::notifyBySound( const QStri
+ // kdDebug() << "KNotify::notifyBySound - trying to play file " << soundFile << endl;
+
+ if (!external) {
+- //If we disabled using aRts, just return,
+- //(If we don't, we'll blow up accessing the null soundServer)
+- if (!d->useArts)
++ //If we disabled audio, just return,
++ if (!d->useKDEMM)
+ {
+ soundFinished( eventId, NoSoundSupport );
+ return false;
+ }
+
+-#ifndef WITHOUT_ARTS
+- // play sound finally
+- while( d->playObjects.count()>5 )
+- abortFirstPlayObject();
+-
+- KDE::PlayObjectFactory factory(soundServer->server());
+- if( d->audioManager )
+- factory.setAudioManagerPlay( d->audioManager );
+ KURL soundURL;
+ soundURL.setPath(soundFile);
+- KDE::PlayObject *playObject = factory.createPlayObject(soundURL, false);
+-
+- if (playObject->isNull())
+- {
+- soundFinished( eventId, NoSoundSupport );
+- delete playObject;
+- return false;
+- }
+-
+- if ( d->volume != 100 )
+- {
+- // It works to access the playObject immediately because we don't allow
+- // non-file URLs for sounds.
+- Arts::StereoVolumeControl volumeControl = Arts::DynamicCast(soundServer->server().createObject("Arts::StereoVolumeControl"));
+- Arts::PlayObject player = playObject->object();
+- Arts::Synth_AMAN_PLAY ap = d->audioManager->amanPlay();
+- if( ! volumeControl.isNull() && ! player.isNull() && ! ap.isNull() )
+- {
+- volumeControl.scaleFactor( d->volume/100.0 );
+-
+- ap.stop();
+- Arts::disconnect( player, "left", ap, "left" );
+- Arts::disconnect( player, "right", ap, "right" );
+-
+- ap.start();
+- volumeControl.start();
+-
+- Arts::connect(player,"left",volumeControl,"inleft");
+- Arts::connect(player,"right",volumeControl,"inright");
+-
+- Arts::connect(volumeControl,"outleft",ap,"left");
+- Arts::connect(volumeControl,"outright",ap,"right");
+-
+- player._addChild( volumeControl, "volume" );
+- }
+- }
+-
+- playObject->play();
+- d->playObjects.append( playObject );
++ KDE::Multimedia::SimplePlayer* playObject = new KDE::Multimedia::SimplePlayer( this );
+ d->playObjectEventMap.insert( playObject, eventId );
++ playObject->play( soundURL );
+
+ if ( !d->playTimer )
+ {
+@@ -532,8 +363,7 @@ bool KNotify::notifyBySound( const QStri
+ }
+ if ( !d->playTimer->isActive() )
+ d->playTimer->start( 1000 );
+-#endif
+- return true;
++ return playObject->isPlaying();
+
+ } else if(!d->externalPlayer.isEmpty()) {
+ // use an external player to play the sound
+@@ -686,58 +516,39 @@ void KNotify::setVolume( int volume )
+ d->volume = volume;
+ }
+
++void KNotify::slotPlayerProcessExited( KProcess *proc )
++{
++ soundFinished( d->externalPlayerEventId,
++ (proc->normalExit() && proc->exitStatus() == 0) ? PlayedOK : Unknown );
++}
++
++
+ void KNotify::playTimeout()
+ {
+-#ifndef WITHOUT_ARTS
+- for ( QPtrListIterator< KDE::PlayObject > it(d->playObjects); *it;)
++qDebug("KNotify::playTimeout");
++ for( QMap< KDE::Multimedia::SimplePlayer*, int >::Iterator it = d->playObjectEventMap.begin();
++ it != d->playObjectEventMap.end();
++ )
+ {
+- QPtrListIterator< KDE::PlayObject > current = it;
++ QMap< KDE::Multimedia::SimplePlayer*, int >::Iterator current = it;
+ ++it;
+- if ( (*current)->state() != Arts::posPlaying )
++ KDE::Multimedia::SimplePlayer* playObject = current.key();
++ if ( !playObject->isPlaying() || playObject->totalTime() <= 0 ) // may be "playing" even if there's an error
+ {
+- QMap<KDE::PlayObject*,int>::Iterator eit = d->playObjectEventMap.find( *current );
+- if ( eit != d->playObjectEventMap.end() )
+- {
+- soundFinished( *eit, PlayedOK );
+- d->playObjectEventMap.remove( eit );
+- }
+- d->playObjects.remove( current );
++ soundFinished( *current, PlayedOK );
++ d->playObjectEventMap.remove( current );
++ disconnect( playObject, SIGNAL( finished() ) );
++ playObject->stop();
++ emit deletePlayObject(playObject);
+ }
+ }
+- if ( !d->playObjects.count() )
++ if ( !d->playObjectEventMap.count() )
+ d->playTimer->stop();
+-#endif
+ }
+
+-bool KNotify::isPlaying( const QString& soundFile ) const
++void KNotify::objectDeleter( KDE::Multimedia::SimplePlayer *playObject )
+ {
+-#ifndef WITHOUT_ARTS
+- for ( QPtrListIterator< KDE::PlayObject > it(d->playObjects); *it; ++it)
+- {
+- if ( (*it)->mediaName() == soundFile )
+- return true;
+- }
+-#endif
+- return false;
+-}
+-
+-void KNotify::slotPlayerProcessExited( KProcess *proc )
+-{
+- soundFinished( d->externalPlayerEventId,
+- (proc->normalExit() && proc->exitStatus() == 0) ? PlayedOK : Unknown );
+-}
+-
+-void KNotify::abortFirstPlayObject()
+-{
+-#ifndef WITHOUT_ARTS
+- QMap<KDE::PlayObject*,int>::Iterator it = d->playObjectEventMap.find( d->playObjects.getFirst() );
+- if ( it != d->playObjectEventMap.end() )
+- {
+- soundFinished( it.data(), Aborted );
+- d->playObjectEventMap.remove( it );
+- }
+- d->playObjects.removeFirst();
+-#endif
++ delete playObject;
+ }
+
+ void KNotify::soundFinished( int eventId, PlayingFinishedStatus reason )
+@@ -780,16 +591,6 @@ WId KNotify::checkWinId( const QString &
+ return senderWinId;
+ }
+
+-void KNotify::restartedArtsd()
+-{
+-#ifndef WITHOUT_ARTS
+- delete d->audioManager;
+- d->audioManager = new KAudioManagerPlay( soundServer );
+- d->audioManager->setTitle( i18n( "KDE System Notifications" ) );
+- d->audioManager->setAutoRestoreID( "KNotify Aman Play" );
+-#endif
+-}
+-
+ void KNotify::sessionReady()
+ {
+ if( d->inStartup && !d->startupEvents.isEmpty())
+Index: arts/knotify/knotify.h
+===================================================================
+--- arts/knotify/knotify.h.orig
++++ arts/knotify/knotify.h
+@@ -24,9 +24,10 @@
+ #include <knotifyclient.h>
+ #include <dcopobject.h>
+
++#include <kdemm/simpleplayer.h>
++
+ class KNotifyPrivate;
+ class KProcess;
+-class KConfig;
+
+ class KNotify : public QObject, public DCOPObject
+ {
+@@ -76,19 +77,16 @@ private:
+ bool notifyByStderr(const QString &text);
+ bool notifyByPassivePopup(const QString &text, const QString &appName,
+ KConfig* eventsFile, WId winId );
+- bool notifyByExecute(const QString &command,
+- const QString& event,
+- const QString& fromApp,
++ bool notifyByExecute(const QString &command,
++ const QString& event,
++ const QString& fromApp,
+ const QString& text,
+ int winId,
+ int eventId );
+- bool notifyByTaskbar( WId winId );
+-
+- bool isPlaying( const QString& soundFile ) const;
+-
+- void soundFinished( int eventId, PlayingFinishedStatus reason );
+- void abortFirstPlayObject();
+-
++ bool notifyByTaskbar( WId winId );
++
++ void soundFinished( int eventId, PlayingFinishedStatus reason );
++
+ WId checkWinId( const QString& appName, WId senderWinId );
+
+ /**
+@@ -97,9 +95,13 @@ private:
+ bool isGlobal(const QString &eventname);
+
+ private slots:
+- void playTimeout();
+- void slotPlayerProcessExited( KProcess *proc );
+- void restartedArtsd();
++ void playTimeout();
++ void slotPlayerProcessExited( KProcess *proc );
++ void objectDeleter( KDE::Multimedia::SimplePlayer* );
++
++signals:
++ void deletePlayObject( KDE::Multimedia::SimplePlayer* );
++
+
+ private:
+ KNotifyPrivate* d;
+Index: arts/knotify/Makefile.am
+===================================================================
+--- arts/knotify/Makefile.am.orig
++++ arts/knotify/Makefile.am
+@@ -3,12 +3,13 @@ INCLUDES= -I$(top_srcdir)/arts/kde -I$(i
+
+ ####### Files
+
+-kde_module_LTLIBRARIES = knotify.la
++#kde_module_LTLIBRARIES = knotify.la
++bin_PROGRAMS =
++lib_LTLIBRARIES =
++kdeinit_LTLIBRARIES = knotify.la
+
+ knotify_la_SOURCES = knotify.cpp knotify.skel
+-if include_ARTS
+-knotify_la_LIBADD = -lsoundserver_idl -lqtmcop $(LIB_KDEUI) $(top_builddir)/arts/kde/libartskde.la
+-endif
++knotify_la_LIBADD = $(LIB_KDEUI) $(top_builddir)/kdemm/libkdemm.la
+ knotify_la_LDFLAGS = $(all_libraries) -module -avoid-version
+ knotify_la_METASOURCES = AUTO
+
+Index: kdemm/channel.h
+===================================================================
+--- kdemm/channel.h.orig
++++ kdemm/channel.h
+@@ -83,7 +83,7 @@ namespace Multimedia
+ * You can not instantiate channels yourself, use the Factory to
+ * create them.
+ */
+- Channel( const QString & name, const QString & type, Direction direction,
++ Channel( const QString & channelName, const QString & type, Direction direction,
+ QObject * parent = 0, const char * name = 0 );
+
+ private:
+Index: kdemm/factory.cpp
+===================================================================
+--- kdemm/factory.cpp.orig
++++ kdemm/factory.cpp
+@@ -80,6 +80,7 @@ class Factory::Private
+ ":\n" << e << endl;
+ }
+ }
++#if 0
+ if( 0 == backend )
+ {
+ if( offers.size() == 0 )
+@@ -100,6 +101,7 @@ class Factory::Private
+ i18n( "Unable to use any of the available Multimedia Backends" ), details );
+ }
+ }
++#endif
+ }
+
+ Backend * backend;
+Index: kdemm/simpleplayer.cpp
+===================================================================
+--- kdemm/simpleplayer.cpp.orig
++++ kdemm/simpleplayer.cpp
+@@ -50,10 +50,12 @@ SimplePlayer::SimplePlayer( QObject * pa
+ 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 @@ SimplePlayer::~SimplePlayer()
+
+ void SimplePlayer::play( const KURL & url )
+ {
++ if( ! d->player )
++ return;
+ if( isPaused() && url == d->url )
+ {
+ d->player->play();
+@@ -78,51 +82,71 @@ void SimplePlayer::play( const KURL & ur
+
+ 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 @@ void SimplePlayer::deleteYourObjects()
+ 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 @@ void SimplePlayer::recreateObjects()
+ d->channel->setVolume( d->channelvolume );
+
+ d->player = Factory::self()->createPlayer();
++ if( ! d->player )
++ return;
++
+ d->player->setOutputChannel( d->channel );
+
+ if( d->state != Player::NoMedia )