From 02da1f586ef7945fef385e6d4743ef53441bc2fa Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Sun, 23 May 2004 20:52:00 +0000 Subject: - eConnections holds reference to object - use eAutoInitPtr instead of eAutoInitP for iObject-based stuff - fix some ref initialization - added service stop --- lib/nav/core.cpp | 12 +++++++++--- lib/nav/core.h | 3 ++- 2 files changed, 11 insertions(+), 4 deletions(-) (limited to 'lib/nav') diff --git a/lib/nav/core.cpp b/lib/nav/core.cpp index b5c229c7..9314d2c1 100644 --- a/lib/nav/core.cpp +++ b/lib/nav/core.cpp @@ -11,7 +11,11 @@ void eNavigation::serviceEvent(iPlayableService* service, int event) switch (event) { case iPlayableService::evEnd: - /* our running main service stopped. */ + /* at first, kill the running service */ + m_event(this, evStopService); + m_runningService = 0; + m_service_event_conn = 0; + /* our running main service stopped. remove it from playlist */ if (!m_playlist.empty()) m_playlist.erase(m_playlist.begin()); if (!m_playlist.empty()) @@ -33,6 +37,7 @@ void eNavigation::serviceEvent(iPlayableService* service, int event) RESULT eNavigation::playService(const eServiceReference &service) { + assert(m_servicehandler); RESULT res = m_servicehandler->play(service, m_runningService); if (m_runningService) { @@ -53,7 +58,7 @@ RESULT eNavigation::enqueueService(const eServiceReference &service) RESULT eNavigation::connectEvent(const Slot2 &event, ePtr &connection) { - connection = new eConnection(m_event.connect(event)); + connection = new eConnection(this, m_event.connect(event)); return 0; } @@ -76,8 +81,9 @@ RESULT eNavigation::pause(int dop) return p->unpause(); } -eNavigation::eNavigation(iServiceHandler *serviceHandler) +eNavigation::eNavigation(iServiceHandler *serviceHandler): ref(0) { + assert(serviceHandler); m_servicehandler = serviceHandler; } diff --git a/lib/nav/core.h b/lib/nav/core.h index 056c150b..99cf75ae 100644 --- a/lib/nav/core.h +++ b/lib/nav/core.h @@ -19,7 +19,8 @@ private: public: enum { - evNewService, + evStopService, /** the "current" service was just stopped and likes to be deallocated (clear refs!) */ + evNewService, /** a new "current" service was just started */ evPlayFailed, evPlaylistDone }; -- cgit v1.2.3