1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-08 07:07:05 +02:00

* Fixed crash and simplified code in QueryLabel.

This commit is contained in:
Christian Muehlhaeuser
2014-10-04 09:43:11 +02:00
parent d7cf97d4b7
commit 772690aff6

View File

@@ -95,46 +95,20 @@ QueryLabel::init()
QString QString
QueryLabel::text() const 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; return m_text;
if ( !m_result.isNull() ) if ( m_type & Artist && artist() )
{ {
if ( m_type & Artist ) return artist()->name();
{
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();
}
} }
else if ( !m_query.isNull() ) else if ( m_type & Album && album() )
{ {
if ( m_type & Artist ) return album()->name();
{
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();
}
} }
else if ( m_type & Artist && !m_artist.isNull() ) else if ( m_type & Track && query() )
{ {
return m_artist->name(); return query()->track()->track();
}
else if ( m_type & Album && !m_album.isNull() )
{
return m_album->name();
} }
return QString(); return QString();
@@ -428,19 +402,23 @@ QueryLabel::leaveEvent( QEvent* event )
void void
QueryLabel::startDrag() QueryLabel::startDrag()
{ {
if ( m_query.isNull() && m_album.isNull() && m_artist.isNull() ) QDrag* drag = new QDrag( this );
return;
QDrag *drag = new QDrag( this );
QByteArray data; QByteArray data;
QDataStream dataStream( &data, QIODevice::WriteOnly ); QDataStream dataStream( &data, QIODevice::WriteOnly );
QMimeData* mimeData = new QMimeData(); QMimeData* mimeData = new QMimeData();
mimeData->setText( text() ); mimeData->setText( text() );
bool failed = false;
switch( m_type ) switch( m_type )
{ {
case Artist: case Artist:
{ {
if ( !artist() )
{
failed = true;
break;
}
dataStream << artist()->name(); dataStream << artist()->name();
mimeData->setData( "application/tomahawk.metadata.artist", data ); mimeData->setData( "application/tomahawk.metadata.artist", data );
drag->setPixmap( TomahawkUtils::createDragPixmap( TomahawkUtils::MediaTypeArtist ) ); drag->setPixmap( TomahawkUtils::createDragPixmap( TomahawkUtils::MediaTypeArtist ) );
@@ -448,6 +426,12 @@ QueryLabel::startDrag()
} }
case Album: case Album:
{ {
if ( !album() )
{
failed = true;
break;
}
dataStream << artist()->name(); dataStream << artist()->name();
dataStream << album()->name(); dataStream << album()->name();
mimeData->setData( "application/tomahawk.metadata.album", data ); mimeData->setData( "application/tomahawk.metadata.album", data );
@@ -457,6 +441,12 @@ QueryLabel::startDrag()
default: default:
{ {
if ( !query() )
{
failed = true;
break;
}
dataStream << qlonglong( &m_query ); dataStream << qlonglong( &m_query );
mimeData->setData( "application/tomahawk.query.list", data ); mimeData->setData( "application/tomahawk.query.list", data );
drag->setPixmap( TomahawkUtils::createDragPixmap( TomahawkUtils::MediaTypeTrack ) ); 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(); // QPoint hotSpot = event->pos() - child->pos();
// drag->setHotSpot( hotSpot ); // drag->setHotSpot( hotSpot );
drag->setMimeData( mimeData );
drag->exec( Qt::CopyAction ); drag->exec( Qt::CopyAction );
} }