From 21d4f2b83a23643630bbc70602dcc6ff5e05b6cb Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Fri, 7 Jun 2013 11:27:58 +0200 Subject: [PATCH] * Fixed creating QPixmaps in the wrong thread. --- src/libtomahawk/Source.cpp | 14 +++++++++++--- src/libtomahawk/Source.h | 2 +- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/libtomahawk/Source.cpp b/src/libtomahawk/Source.cpp index 1bfdd0ca4..035288f01 100644 --- a/src/libtomahawk/Source.cpp +++ b/src/libtomahawk/Source.cpp @@ -57,6 +57,7 @@ Source::Source( int id, const QString& nodeId ) , m_id( id ) , m_updateIndexWhenSynced( false ) , m_state( DBSyncConnection::UNKNOWN ) + , m_avatar( 0 ) , m_avatarLoaded( false ) , m_cc( 0 ) , m_commandCount( 0 ) @@ -261,7 +262,12 @@ Source::avatar( TomahawkUtils::ImageMode style, const QSize& size ) } if ( m_avatarLoaded ) - return m_avatar; + { + if ( m_avatar ) + return *m_avatar; + else + return QPixmap(); + } // Try to get the avatar from the cache // Hint: We store the avatar for each xmpp peer using its contactId, the dbFriendlyName is a contactId of a peer @@ -269,14 +275,16 @@ Source::avatar( TomahawkUtils::ImageMode style, const QSize& size ) QByteArray avatarBuffer = TomahawkUtils::Cache::instance()->getData( "Sources", dbFriendlyName() ).toByteArray(); if ( !avatarBuffer.isNull() ) { + tDebug() << Q_FUNC_INFO << QThread::currentThread(); QPixmap avatar; avatar.loadFromData( avatarBuffer ); avatarBuffer.clear(); - m_avatar = QPixmap( TomahawkUtils::createRoundedImage( avatar, QSize( 0, 0 ) ) ); + m_avatar = new QPixmap( TomahawkUtils::createRoundedImage( avatar, QSize( 0, 0 ) ) ); + return *m_avatar; } - return m_avatar; + return QPixmap(); } #endif diff --git a/src/libtomahawk/Source.h b/src/libtomahawk/Source.h index 1f5c1dddc..c4dcdf868 100644 --- a/src/libtomahawk/Source.h +++ b/src/libtomahawk/Source.h @@ -171,7 +171,7 @@ private: DBSyncConnection::State m_state; QTimer m_currentTrackTimer; - QPixmap m_avatar; + QPixmap* m_avatar; bool m_avatarLoaded; QPointer m_cc;