From 772690aff6973643daaf7c86625ad4acc30bbacd Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 4 Oct 2014 09:43:11 +0200 Subject: [PATCH] * Fixed crash and simplified code in QueryLabel. --- src/libtomahawk/widgets/QueryLabel.cpp | 73 ++++++++++++-------------- 1 file changed, 34 insertions(+), 39 deletions(-) diff --git a/src/libtomahawk/widgets/QueryLabel.cpp b/src/libtomahawk/widgets/QueryLabel.cpp index 61e6ff015..1410407cb 100644 --- a/src/libtomahawk/widgets/QueryLabel.cpp +++ b/src/libtomahawk/widgets/QueryLabel.cpp @@ -95,46 +95,20 @@ QueryLabel::init() QString QueryLabel::text() const { - if ( m_result.isNull() && m_query.isNull() && m_artist.isNull() && m_album.isNull() ) + if ( !m_result && !m_query && !m_artist && !m_album ) return m_text; - if ( !m_result.isNull() ) + if ( m_type & Artist && artist() ) { - if ( m_type & Artist ) - { - return m_result->track()->artist(); - } - if ( m_type & Album && !m_result->track()->album().isEmpty() ) - { - return m_result->track()->album(); - } - if ( m_type & Track ) - { - return m_result->track()->track(); - } + return artist()->name(); } - else if ( !m_query.isNull() ) + else if ( m_type & Album && album() ) { - if ( m_type & Artist ) - { - return m_query->track()->artist(); - } - if ( m_type & Album && !m_query->track()->album().isEmpty() ) - { - return m_query->track()->album(); - } - if ( m_type & Track ) - { - return m_query->track()->track(); - } + return album()->name(); } - else if ( m_type & Artist && !m_artist.isNull() ) + else if ( m_type & Track && query() ) { - return m_artist->name(); - } - else if ( m_type & Album && !m_album.isNull() ) - { - return m_album->name(); + return query()->track()->track(); } return QString(); @@ -428,19 +402,23 @@ QueryLabel::leaveEvent( QEvent* event ) void QueryLabel::startDrag() { - if ( m_query.isNull() && m_album.isNull() && m_artist.isNull() ) - return; - - QDrag *drag = new QDrag( this ); + QDrag* drag = new QDrag( this ); QByteArray data; QDataStream dataStream( &data, QIODevice::WriteOnly ); QMimeData* mimeData = new QMimeData(); mimeData->setText( text() ); + bool failed = false; switch( m_type ) { case Artist: { + if ( !artist() ) + { + failed = true; + break; + } + dataStream << artist()->name(); mimeData->setData( "application/tomahawk.metadata.artist", data ); drag->setPixmap( TomahawkUtils::createDragPixmap( TomahawkUtils::MediaTypeArtist ) ); @@ -448,6 +426,12 @@ QueryLabel::startDrag() } case Album: { + if ( !album() ) + { + failed = true; + break; + } + dataStream << artist()->name(); dataStream << album()->name(); mimeData->setData( "application/tomahawk.metadata.album", data ); @@ -457,6 +441,12 @@ QueryLabel::startDrag() default: { + if ( !query() ) + { + failed = true; + break; + } + dataStream << qlonglong( &m_query ); mimeData->setData( "application/tomahawk.query.list", data ); drag->setPixmap( TomahawkUtils::createDragPixmap( TomahawkUtils::MediaTypeTrack ) ); @@ -464,11 +454,16 @@ QueryLabel::startDrag() } } - drag->setMimeData( mimeData ); + if ( failed ) + { + delete mimeData; + delete drag; + return; + } // QPoint hotSpot = event->pos() - child->pos(); // drag->setHotSpot( hotSpot ); - + drag->setMimeData( mimeData ); drag->exec( Qt::CopyAction ); }