creating of default skins by accident fixed ( needs only to be done, when

the application has no other skins already defined )
This commit is contained in:
Uwe Rathmann 2017-07-26 17:50:41 +02:00
parent 2b0a39494f
commit e5a0571cb0

View File

@ -5,6 +5,7 @@
#include <QHash> #include <QHash>
#include <QPointer> #include <QPointer>
#include <QGlobalStatic>
namespace namespace
{ {
@ -41,18 +42,21 @@ namespace
return skin; return skin;
} }
}; };
typedef QHash< QString, QPointer< QskSkinFactory > > FactoryTable;
} }
static QHash< QString, QPointer< QskSkinFactory > >& qskFactoryTable() Q_GLOBAL_STATIC( FactoryTable, qskFactoryTable )
static FactoryTable& qskGetFactoryTable()
{ {
static QHash< QString, QPointer< QskSkinFactory > > table; if ( qskFactoryTable->isEmpty() )
if ( table.isEmpty() )
{ {
static SkinFactory dummySkinFactory ( nullptr ); static SkinFactory dummySkinFactory ( nullptr );
table.insert( factoryId.toLower(), &dummySkinFactory ); qskFactoryTable->insert( factoryId.toLower(), &dummySkinFactory );
} }
return table; return *qskFactoryTable;
} }
QskSkinFactory::QskSkinFactory( QObject* parent ): QskSkinFactory::QskSkinFactory( QObject* parent ):
@ -65,19 +69,19 @@ QskSkinFactory::~QskSkinFactory() = default;
void Qsk::registerSkinFactory( const QString& id, QskSkinFactory* factory ) void Qsk::registerSkinFactory( const QString& id, QskSkinFactory* factory )
{ {
qskFactoryTable().insert( id.toLower(), factory ); qskFactoryTable->insert( id.toLower(), factory );
} }
QskSkinFactory* Qsk::skinFactory( const QString& id ) QskSkinFactory* Qsk::skinFactory( const QString& id )
{ {
return qskFactoryTable().value( id.toLower() ).data(); return qskGetFactoryTable().value( id.toLower() ).data();
} }
QStringList Qsk::skinNames() QStringList Qsk::skinNames()
{ {
QStringList names; QStringList names;
for ( auto factory : qskFactoryTable() ) for ( auto factory : qskGetFactoryTable() )
{ {
if ( factory ) if ( factory )
names += factory->skinNames(); names += factory->skinNames();
@ -90,7 +94,7 @@ QskSkin* Qsk::createSkin( const QString& skinName )
{ {
if ( !skinName.isEmpty() ) if ( !skinName.isEmpty() )
{ {
for ( auto factory : qskFactoryTable() ) for ( auto factory : qskGetFactoryTable() )
{ {
QskSkin* skin = factory->createSkin( skinName ); QskSkin* skin = factory->createSkin( skinName );
if ( skin ) if ( skin )