From 92fb2dbb0d8d25742e64d08876b8d04dffbf2dd5 Mon Sep 17 00:00:00 2001
From: Leo Franchi <lfranchi@kde.org>
Date: Tue, 20 Sep 2011 13:01:43 -0400
Subject: [PATCH] End listen along status job if the listener quits tomahawk

---
 src/libtomahawk/jobview/LatchedStatusItem.cpp | 17 +++++++++++++++++
 src/libtomahawk/jobview/LatchedStatusItem.h   |  1 +
 2 files changed, 18 insertions(+)

diff --git a/src/libtomahawk/jobview/LatchedStatusItem.cpp b/src/libtomahawk/jobview/LatchedStatusItem.cpp
index 4041d2abe..c4dee5c19 100644
--- a/src/libtomahawk/jobview/LatchedStatusItem.cpp
+++ b/src/libtomahawk/jobview/LatchedStatusItem.cpp
@@ -80,9 +80,26 @@ LatchedStatusManager::latchedOn( const Tomahawk::source_ptr& from, const Tomahaw
         LatchedStatusItem* item = new LatchedStatusItem( from, to, this );
         m_jobs[ from->userName() ] = item;
         JobStatusView::instance()->model()->addJob( item );
+
+        connect( from.data(), SIGNAL( offline() ), this, SLOT( sourceOffline() ), Qt::UniqueConnection );
     }
 }
 
+void
+LatchedStatusManager::sourceOffline()
+{
+    Tomahawk::Source* s = qobject_cast< Tomahawk::Source* >( sender() );
+    Q_ASSERT( s );
+
+    if ( m_jobs.contains( s->userName() ) )
+    {
+        QWeakPointer< LatchedStatusItem> job = m_jobs.take( s->userName() ).data();
+        if ( !job.isNull() )
+            job.data()->stop();
+    }
+}
+
+
 void
 LatchedStatusManager::latchedOff( const Tomahawk::source_ptr& from, const Tomahawk::source_ptr& to )
 {
diff --git a/src/libtomahawk/jobview/LatchedStatusItem.h b/src/libtomahawk/jobview/LatchedStatusItem.h
index c67fccef2..7f7cb3f8a 100644
--- a/src/libtomahawk/jobview/LatchedStatusItem.h
+++ b/src/libtomahawk/jobview/LatchedStatusItem.h
@@ -56,6 +56,7 @@ public:
 private slots:
     void latchedOn( const Tomahawk::source_ptr&, const Tomahawk::source_ptr& );
     void latchedOff( const Tomahawk::source_ptr&, const Tomahawk::source_ptr& );
+    void sourceOffline();
 
 private:
     QPixmap m_pixmap;