kdecore: get rid of ambigous KPluginLoader::load()

fixes incorrect warnings about incompatible plasma plugins version

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2021-03-17 06:20:28 +02:00
parent e812139c25
commit 63ee7ca624
2 changed files with 11 additions and 43 deletions

View file

@ -41,7 +41,7 @@ public:
}
const QString name;
quint32 pluginVersion;
mutable quint32 pluginVersion;
QString errorString;
};
@ -169,41 +169,6 @@ KPluginFactory *KPluginLoader::factory()
return factory;
}
bool KPluginLoader::load()
{
Q_D(KPluginLoader);
if (isLoaded())
return true;
if (!QPluginLoader::load()) {
return false;
}
Q_ASSERT(!fileName().isEmpty());
QLibrary lib(fileName());
Q_ASSERT(lib.isLoaded()); // already loaded by QPluginLoader::load()
KDEPluginVerificationData *verificationData = (KDEPluginVerificationData *) lib.resolve("kde_plugin_verification_data");
if (verificationData) {
if (verificationData->dataVersion < KDEPluginVerificationData::PluginVerificationDataVersion
|| ((verificationData->KDEVersion & 0xFFFF00) > (KDE_VERSION & 0xFFFF00)) // newer minor version
|| (KDE_VERSION_MAJOR << 16 != (verificationData->KDEVersion & 0xFF0000))) // different major version
{
d->errorString = i18n("The plugin '%1' uses an incompatible KDE library (%2).",
d->name, QString::fromLatin1(verificationData->KDEVersionString));
unload();
return false;
}
d->pluginVersion = (verificationData->KDEVersion & 0xFFFF00);
} else {
kDebug() << "The plugin" << d->name << "doesn't contain a kde_plugin_verification_data structure";
d->pluginVersion = 0;
}
return true;
}
QString KPluginLoader::errorString() const
{
Q_D(const KPluginLoader);
@ -217,14 +182,22 @@ QString KPluginLoader::errorString() const
quint32 KPluginLoader::pluginVersion() const
{
Q_D(const KPluginLoader);
const_cast<KPluginLoader*>(this)->load();
if (!d->pluginVersion && !fileName().isEmpty()) {
QLibrary lib(fileName());
KDEPluginVerificationData *verificationData = (KDEPluginVerificationData *) lib.resolve("kde_plugin_verification_data");
if (verificationData) {
d->pluginVersion = (verificationData->KDEVersion & 0xFFFF00);
}
}
return d->pluginVersion;
}
QString KPluginLoader::pluginName() const
{
Q_D(const KPluginLoader);
const_cast<KPluginLoader*>(this)->load();
return d->name;
}

View file

@ -135,11 +135,6 @@ public:
*/
QString errorString() const;
protected:
/**
* Performs the loading of the plugin.
*/
bool load();
private:
Q_DECLARE_PRIVATE(KPluginLoader)
Q_DISABLE_COPY(KPluginLoader)