From dffd614c3837d46a905470a5c87a7d439883073c Mon Sep 17 00:00:00 2001
From: Christian Muehlhaeuser <muesli@gmail.com>
Date: Tue, 15 Jan 2013 09:55:39 +0100
Subject: [PATCH] * Fixed memleak in drag & drop operations.

---
 src/libtomahawk/playlist/TrackView.cpp | 17 ++++++++++++++++-
 src/libtomahawk/playlist/TrackView.h   | 14 +++++++-------
 2 files changed, 23 insertions(+), 8 deletions(-)

diff --git a/src/libtomahawk/playlist/TrackView.cpp b/src/libtomahawk/playlist/TrackView.cpp
index cd1d9b255..1a0bd6894 100644
--- a/src/libtomahawk/playlist/TrackView.cpp
+++ b/src/libtomahawk/playlist/TrackView.cpp
@@ -449,6 +449,7 @@ TrackView::dragEnterEvent( QDragEnterEvent* event )
 void
 TrackView::dragMoveEvent( QDragMoveEvent* event )
 {
+    tDebug() << Q_FUNC_INFO;
     QTreeView::dragMoveEvent( event );
 
     if ( model()->isReadOnly() )
@@ -488,9 +489,21 @@ TrackView::dragMoveEvent( QDragMoveEvent* event )
 }
 
 
+void
+TrackView::dragLeaveEvent( QDragLeaveEvent* event )
+{
+    tDebug() << Q_FUNC_INFO;
+    QTreeView::dragLeaveEvent( event );
+
+    m_dragging = false;
+    setDirtyRegion( m_dropRect );
+}
+
+
 void
 TrackView::dropEvent( QDropEvent* event )
 {
+    tDebug() << Q_FUNC_INFO;
     QTreeView::dropEvent( event );
 
     if ( event->isAccepted() )
@@ -499,7 +512,7 @@ TrackView::dropEvent( QDropEvent* event )
     }
     else
     {
-        if ( DropJob::acceptsMimeData( event->mimeData()) )
+        if ( DropJob::acceptsMimeData( event->mimeData() ) )
         {
             const QPoint pos = event->pos();
             const QModelIndex index = indexAt( pos );
@@ -609,6 +622,8 @@ TrackView::startDrag( Qt::DropActions supportedActions )
     {
         m_proxyModel->removeIndexes( pindexes );
     }
+
+    delete drag;
 }
 
 
diff --git a/src/libtomahawk/playlist/TrackView.h b/src/libtomahawk/playlist/TrackView.h
index f0f5371bd..c9e091f0b 100644
--- a/src/libtomahawk/playlist/TrackView.h
+++ b/src/libtomahawk/playlist/TrackView.h
@@ -108,16 +108,16 @@ protected:
 
     virtual void startDrag( Qt::DropActions supportedActions );
     virtual void dragEnterEvent( QDragEnterEvent* event );
-    virtual void dragLeaveEvent( QDragLeaveEvent* /*event*/ ) { m_dragging = false; setDirtyRegion( m_dropRect ); }
+    virtual void dragLeaveEvent( QDragLeaveEvent* event );
     virtual void dragMoveEvent( QDragMoveEvent* event );
     virtual void dropEvent( QDropEvent* event );
 
-    void wheelEvent( QWheelEvent* event );
-    void mouseMoveEvent( QMouseEvent* event );
-    void mousePressEvent( QMouseEvent* event );
-    void leaveEvent( QEvent* event );
-    void paintEvent( QPaintEvent* event );
-    void keyPressEvent( QKeyEvent* event );
+    virtual void wheelEvent( QWheelEvent* event );
+    virtual void mouseMoveEvent( QMouseEvent* event );
+    virtual void mousePressEvent( QMouseEvent* event );
+    virtual void leaveEvent( QEvent* event );
+    virtual void paintEvent( QPaintEvent* event );
+    virtual void keyPressEvent( QKeyEvent* event );
 
 protected slots:
     virtual void currentChanged( const QModelIndex& current, const QModelIndex& previous );