diff --git a/src/core/engine.h b/src/core/engine.h --- a/src/core/engine.h +++ b/src/core/engine.h @@ -33,6 +33,7 @@ class QTimer; class KJob; +class EnginePrivate; namespace Attica { @@ -384,7 +385,8 @@ // the current request from providers Provider::SearchRequest m_currentRequest; - Attica::ProviderManager *m_atticaProviderManager; + + EnginePrivate * const d; // the page that is currently displayed, so it is not requested repeatedly int m_currentPage; diff --git a/src/core/engine.cpp b/src/core/engine.cpp --- a/src/core/engine.cpp +++ b/src/core/engine.cpp @@ -60,33 +60,15 @@ class EnginePrivate { public: QList categoriesMetadata; + Attica::ProviderManager *m_atticaProviderManager = nullptr; }; -// BCI: Add a real d-pointer -typedef QHash EnginePrivateHash; -Q_GLOBAL_STATIC(EnginePrivateHash, d_func) -static EnginePrivate *d(const Engine* engine) -{ - EnginePrivate* ret = d_func()->value(engine); - if (!ret) { - ret = new EnginePrivate; - d_func()->insert(engine, ret); - } - return ret; -} -static void delete_d(const Engine* engine) -{ - if (auto d = d_func()) { - delete d->take(engine); - } -} - Engine::Engine(QObject *parent) : QObject(parent) , m_installation(new Installation) , m_cache() , m_searchTimer(new QTimer) - , m_atticaProviderManager(nullptr) + , d(new EnginePrivate) , m_currentPage(-1) , m_pageSize(20) , m_numDataJobs(0) @@ -106,10 +88,10 @@ if (m_cache) { m_cache->writeRegistry(); } - delete m_atticaProviderManager; + delete d->m_atticaProviderManager; delete m_searchTimer; delete m_installation; - delete_d(this); + delete d; } bool Engine::init(const QString &configfile) @@ -176,18 +158,18 @@ QList Engine::categoriesMetadata() { - return d(this)->categoriesMetadata; + return d->categoriesMetadata; } void Engine::loadProviders() { if (m_providerFileUrl.isEmpty()) { // it would be nicer to move the attica stuff into its own class qCDebug(KNEWSTUFFCORE) << "Using OCS default providers"; - delete m_atticaProviderManager; - m_atticaProviderManager = new Attica::ProviderManager; - connect(m_atticaProviderManager, &Attica::ProviderManager::providerAdded, this, &Engine::atticaProviderLoaded); - m_atticaProviderManager->loadDefaultProviders(); + delete d->m_atticaProviderManager; + d->m_atticaProviderManager = new Attica::ProviderManager; + connect(d->m_atticaProviderManager, &Attica::ProviderManager::providerAdded, this, &Engine::atticaProviderLoaded); + d->m_atticaProviderManager->loadDefaultProviders(); } else { qCDebug(KNEWSTUFFCORE) << "loading providers from " << m_providerFileUrl; emit signalBusy(i18n("Loading provider information")); @@ -232,7 +214,7 @@ provider = QSharedPointer (new AtticaProvider(m_categories)); connect(provider.data(), &Provider::categoriesMetadataLoded, this, [this](const QList &categories){ - d(this)->categoriesMetadata = categories; + d->categoriesMetadata = categories; emit signalCategoriesMetadataLoded(categories); }); } else { @@ -260,7 +242,7 @@ QSharedPointer (new AtticaProvider(atticaProvider, m_categories)); connect(provider.data(), &Provider::categoriesMetadataLoded, this, [this](const QList &categories){ - d(this)->categoriesMetadata = categories; + d->categoriesMetadata = categories; emit signalCategoriesMetadataLoded(categories); }); addProvider(provider);