diff options
-rw-r--r-- | src/corelib/plugin/qfactoryloader.cpp | 12 | ||||
-rw-r--r-- | src/corelib/plugin/qlibrary_p.h | 3 | ||||
-rw-r--r-- | src/corelib/plugin/qplugin.h | 16 | ||||
-rw-r--r-- | src/corelib/plugin/qpluginloader.cpp | 48 | ||||
-rw-r--r-- | src/corelib/plugin/qpluginloader.h | 2 | ||||
-rw-r--r-- | tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp | 2 |
6 files changed, 67 insertions, 16 deletions
diff --git a/src/corelib/plugin/qfactoryloader.cpp b/src/corelib/plugin/qfactoryloader.cpp index 3c8e00519b..a3e809a266 100644 --- a/src/corelib/plugin/qfactoryloader.cpp +++ b/src/corelib/plugin/qfactoryloader.cpp @@ -235,13 +235,10 @@ QList<QJsonObject> QFactoryLoader::metaData() const for (int i = 0; i < d->libraryList.size(); ++i) metaData.append(d->libraryList.at(i)->metaData); - QVector<QStaticPlugin> staticPlugins = QLibraryPrivate::staticPlugins(); - for (int i = 0; i < staticPlugins.count(); ++i) { - const char *rawMetaData = staticPlugins.at(i).metaData(); - QJsonObject object = QLibraryPrivate::fromRawMetaData(rawMetaData).object(); + foreach (const QStaticPlugin &plugin, QPluginLoader::staticPlugins()) { + const QJsonObject object = plugin.metaData(); if (object.value(QLatin1String("IID")) != QLatin1String(d->iid.constData(), d->iid.size())) continue; - metaData.append(object); } return metaData; @@ -269,10 +266,9 @@ QObject *QFactoryLoader::instance(int index) const } index -= d->libraryList.size(); - QVector<QStaticPlugin> staticPlugins = QLibraryPrivate::staticPlugins(); + QVector<QStaticPlugin> staticPlugins = QPluginLoader::staticPlugins(); for (int i = 0; i < staticPlugins.count(); ++i) { - const char *rawMetaData = staticPlugins.at(i).metaData(); - QJsonObject object = QLibraryPrivate::fromRawMetaData(rawMetaData).object(); + const QJsonObject object = staticPlugins.at(i).metaData(); if (object.value(QLatin1String("IID")) != QLatin1String(d->iid.constData(), d->iid.size())) continue; diff --git a/src/corelib/plugin/qlibrary_p.h b/src/corelib/plugin/qlibrary_p.h index abf11be9f7..20b0c7e20f 100644 --- a/src/corelib/plugin/qlibrary_p.h +++ b/src/corelib/plugin/qlibrary_p.h @@ -98,9 +98,6 @@ public: static QStringList suffixes_sys(const QString &fullVersion); static QStringList prefixes_sys(); - static QVector<QStaticPlugin> staticPlugins(); - - QPointer<QObject> inst; QtPluginInstanceFunction instance; QJsonObject metaData; diff --git a/src/corelib/plugin/qplugin.h b/src/corelib/plugin/qplugin.h index b91a0e9900..1ec9325e5e 100644 --- a/src/corelib/plugin/qplugin.h +++ b/src/corelib/plugin/qplugin.h @@ -44,6 +44,7 @@ #include <QtCore/qobject.h> #include <QtCore/qpointer.h> +#include <QtCore/qjsonobject.h> QT_BEGIN_NAMESPACE @@ -59,11 +60,22 @@ QT_BEGIN_NAMESPACE typedef QObject *(*QtPluginInstanceFunction)(); typedef const char *(*QtPluginMetaDataFunction)(); -struct QStaticPlugin +struct Q_CORE_EXPORT QStaticPlugin { + // Note: This struct is initialized using an initializer list. + // As such, it cannot have any new constructors or variables. +#ifndef Q_QDOC QtPluginInstanceFunction instance; - QtPluginMetaDataFunction metaData; + QtPluginMetaDataFunction rawMetaData; +#else + // Since qdoc gets confused by the use of function + // pointers, we add these dummes for it to parse instead: + QObject *instance(); + const char *rawMetaData(); +#endif + QJsonObject metaData() const; }; +Q_DECLARE_TYPEINFO(QStaticPlugin, Q_PRIMITIVE_TYPE); void Q_CORE_EXPORT qRegisterStaticPluginFunction(QStaticPlugin staticPlugin); diff --git a/src/corelib/plugin/qpluginloader.cpp b/src/corelib/plugin/qpluginloader.cpp index 5a59942aad..46844acb01 100644 --- a/src/corelib/plugin/qpluginloader.cpp +++ b/src/corelib/plugin/qpluginloader.cpp @@ -107,6 +107,33 @@ QT_BEGIN_NAMESPACE */ /*! + \class QStaticPlugin + \inmodule QtCore + \since 5.2 + + \brief QStaticPlugin is a struct containing a reference to a + static plugin instance together with its meta data. + + \sa QPluginLoader, {How to Create Qt Plugins} +*/ + +/*! + \fn QObject *QStaticPlugin::instance() + + Returns the plugin instance. + + \sa QPluginLoader::staticInstances() +*/ + +/*! + \fn const char *QStaticPlugin::rawMetaData() + + Returns the raw meta data for the plugin. + + \sa metaData(), Q_PLUGIN_METADATA() +*/ + +/*! Constructs a plugin loader with the given \a parent. */ QPluginLoader::QPluginLoader(QObject *parent) @@ -407,6 +434,7 @@ void Q_CORE_EXPORT qRegisterStaticPluginFunction(QStaticPlugin plugin) /*! Returns a list of static plugin instances (root components) held by the plugin loader. + \sa staticPlugins() */ QObjectList QPluginLoader::staticInstances() { @@ -419,8 +447,14 @@ QObjectList QPluginLoader::staticInstances() return instances; } - -QVector<QStaticPlugin> QLibraryPrivate::staticPlugins() +/*! + Returns a list of QStaticPlugins held by the plugin + loader. The function is similar to \l staticInstances() + with the addition that a QStaticPlugin also contains + meta data information. + \sa staticInstances() +*/ +QVector<QStaticPlugin> QPluginLoader::staticPlugins() { StaticPluginList *plugins = staticPluginList(); if (plugins) @@ -428,6 +462,16 @@ QVector<QStaticPlugin> QLibraryPrivate::staticPlugins() return QVector<QStaticPlugin>(); } +/*! + Returns a the meta data for the plugin as a QJsonObject. + + \sa rawMetaData() +*/ +QJsonObject QStaticPlugin::metaData() const +{ + return QLibraryPrivate::fromRawMetaData(rawMetaData()).object(); +} + QT_END_NAMESPACE #endif // QT_NO_LIBRARY diff --git a/src/corelib/plugin/qpluginloader.h b/src/corelib/plugin/qpluginloader.h index 8f8833e839..88c8ba4fa0 100644 --- a/src/corelib/plugin/qpluginloader.h +++ b/src/corelib/plugin/qpluginloader.h @@ -43,6 +43,7 @@ #define QPLUGINLOADER_H #include <QtCore/qlibrary.h> +#include <QtCore/qplugin.h> #ifndef QT_NO_LIBRARY @@ -65,6 +66,7 @@ public: QJsonObject metaData() const; static QObjectList staticInstances(); + static QVector<QStaticPlugin> staticPlugins(); bool load(); bool unload(); diff --git a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp index 663f664d94..0f224c4909 100644 --- a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp +++ b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp @@ -765,7 +765,7 @@ void tst_QGuiApplication::genericPluginsAndWindowSystemEvents() QStaticPlugin testPluginInfo; testPluginInfo.instance = qt_plugin_instance; - testPluginInfo.metaData = qt_plugin_query_metadata; + testPluginInfo.rawMetaData = qt_plugin_query_metadata; qRegisterStaticPluginFunction(testPluginInfo); int argc = 3; char *argv[] = { const_cast<char*>("tst_qguiapplication"), const_cast<char*>("-plugin"), const_cast<char*>("testplugin") }; |