From b1e3590fc4214bfff6639ef62455ac8c4d6f8ba1 Mon Sep 17 00:00:00 2001 From: Volker Krause Date: Mon, 3 Aug 2020 16:58:58 +0200 Subject: [PATCH] Add support for loading static plugins --- src/lib/marble/PluginManager.cpp | 48 +++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/src/lib/marble/PluginManager.cpp b/src/lib/marble/PluginManager.cpp index a37993ff0..93d81bf23 100644 --- a/src/lib/marble/PluginManager.cpp +++ b/src/lib/marble/PluginManager.cpp @@ -45,6 +45,7 @@ class PluginManagerPrivate ~PluginManagerPrivate(); void loadPlugins(); + bool addPlugin(QObject *obj, const QPluginLoader *loader); bool m_pluginsLoaded; QList m_renderPluginTemplates; @@ -189,6 +190,28 @@ bool appendPlugin( QObject * obj, const QPluginLoader *loader, QList &pl return false; } +bool PluginManagerPrivate::addPlugin(QObject *obj, const QPluginLoader *loader) +{ + bool isPlugin = appendPlugin + ( obj, loader, m_renderPluginTemplates ); + isPlugin = isPlugin || appendPlugin + ( obj, loader, m_positionProviderPluginTemplates ); + isPlugin = isPlugin || appendPlugin + ( obj, loader, m_searchRunnerPlugins ); + isPlugin = isPlugin || appendPlugin + ( obj, loader, m_reverseGeocodingRunnerPlugins ); + isPlugin = isPlugin || appendPlugin + ( obj, loader, m_routingRunnerPlugins ); + isPlugin = isPlugin || appendPlugin + ( obj, loader, m_parsingRunnerPlugins ); + if ( !isPlugin ) { + qWarning() << "Ignoring the following plugin since it couldn't be loaded:" << (loader ? loader->fileName() : ""); + mDebug() << "Plugin failure:" << (loader ? loader->fileName() : "") << "is a plugin, but it does not implement the " + << "right interfaces or it was compiled against an old version of Marble. Ignoring it."; + } + return isPlugin; +} + void PluginManagerPrivate::loadPlugins() { if (m_pluginsLoaded) @@ -238,22 +261,8 @@ void PluginManagerPrivate::loadPlugins() QObject * obj = loader->instance(); if ( obj ) { - bool isPlugin = appendPlugin - ( obj, loader, m_renderPluginTemplates ); - isPlugin = isPlugin || appendPlugin - ( obj, loader, m_positionProviderPluginTemplates ); - isPlugin = isPlugin || appendPlugin - ( obj, loader, m_searchRunnerPlugins ); // intentionally T==U - isPlugin = isPlugin || appendPlugin - ( obj, loader, m_reverseGeocodingRunnerPlugins ); // intentionally T==U - isPlugin = isPlugin || appendPlugin - ( obj, loader, m_routingRunnerPlugins ); // intentionally T==U - isPlugin = isPlugin || appendPlugin - ( obj, loader, m_parsingRunnerPlugins ); // intentionally T==U - if ( !isPlugin ) { - qWarning() << "Ignoring the following plugin since it couldn't be loaded:" << path; - mDebug() << "Plugin failure:" << path << "is a plugin, but it does not implement the " - << "right interfaces or it was compiled against an old version of Marble. Ignoring it."; + bool isPlugin = addPlugin(obj, loader); + if (!isPlugin) { delete loader; } else { foundPlugin = true; @@ -265,6 +274,13 @@ void PluginManagerPrivate::loadPlugins() } } + const auto staticPlugins = QPluginLoader::staticInstances(); + for (auto obj : staticPlugins) { + if (addPlugin(obj, nullptr)) { + foundPlugin = true; + } + } + if ( !foundPlugin ) { #ifdef Q_OS_WIN QString pluginPaths = "Plugin Path: " + MarbleDirs::marblePluginPath(); -- GitLab