scripting: Prefer metadata.json over metadata.desktop in GenericScriptedConfig
KPluginMetaData in KF 6 doesn't load desktop files anymore. It means that plasma packages need to come with json metadata files. This change adjusts the generic scripted config loader so it can load configuration even for packages with no metadata.desktop files.
This commit is contained in:
parent
0e393b8fe0
commit
a9833dc9dd
1 changed files with 33 additions and 14 deletions
|
@ -14,7 +14,6 @@
|
|||
|
||||
#include <KAboutData>
|
||||
#define TRANSLATION_DOMAIN "kwin_scripting"
|
||||
#include <KDesktopFile>
|
||||
#include <KLocalizedString>
|
||||
#include <KLocalizedTranslator>
|
||||
#include <kconfigloader.h>
|
||||
|
@ -68,14 +67,40 @@ void GenericScriptedConfig::createUi()
|
|||
{
|
||||
QVBoxLayout *layout = new QVBoxLayout(this);
|
||||
|
||||
const QString kconfigXTFile = QStandardPaths::locate(QStandardPaths::GenericDataLocation,
|
||||
QLatin1String(KWIN_NAME) + QLatin1Char('/') + typeName() + QLatin1Char('/') + m_packageName + QLatin1String("/contents/config/main.xml"));
|
||||
const QString uiPath = QStandardPaths::locate(QStandardPaths::GenericDataLocation,
|
||||
QLatin1String(KWIN_NAME) + QLatin1Char('/') + typeName() + QLatin1Char('/') + m_packageName + QLatin1String("/contents/ui/config.ui"));
|
||||
if (kconfigXTFile.isEmpty() || uiPath.isEmpty()) {
|
||||
layout->addWidget(new QLabel(i18nc("Error message", "Plugin does not provide configuration file in expected location")));
|
||||
const QString packageRoot = QStandardPaths::locate(QStandardPaths::GenericDataLocation,
|
||||
QLatin1String(KWIN_NAME) + QLatin1Char('/') + typeName() + QLatin1Char('/') + m_packageName,
|
||||
QStandardPaths::LocateDirectory);
|
||||
if (packageRoot.isEmpty()) {
|
||||
layout->addWidget(new QLabel(i18nc("Error message", "Could not locate package metadata")));
|
||||
return;
|
||||
}
|
||||
|
||||
KPluginMetaData metaData(packageRoot + QLatin1String("/metadata.json"));
|
||||
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
||||
if (!metaData.isValid()) {
|
||||
metaData = KPluginMetaData::fromDesktopFile(packageRoot + QLatin1String("/metadata.desktop"));
|
||||
if (metaData.isValid()) {
|
||||
qWarning("metadata.desktop format is obsolete. Please convert %s to JSON metadata", qPrintable(metaData.fileName()));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (!metaData.isValid()) {
|
||||
layout->addWidget(new QLabel(i18nc("Required file does not exist", "%1 does not contain a valid metadata.json file", qPrintable(packageRoot))));
|
||||
return;
|
||||
}
|
||||
|
||||
const QString kconfigXTFile = packageRoot + QLatin1String("/contents/config/main.xml");
|
||||
if (!QFileInfo::exists(kconfigXTFile)) {
|
||||
layout->addWidget(new QLabel(i18nc("Required file does not exist", "%1 does not exist", qPrintable(kconfigXTFile))));
|
||||
return;
|
||||
}
|
||||
|
||||
const QString uiPath = packageRoot + QLatin1String("/contents/ui/config.ui");
|
||||
if (!QFileInfo::exists(uiPath)) {
|
||||
layout->addWidget(new QLabel(i18nc("Required file does not exist", "%1 does not exist", qPrintable(uiPath))));
|
||||
return;
|
||||
}
|
||||
|
||||
QFile xmlFile(kconfigXTFile);
|
||||
KConfigGroup cg = configGroup();
|
||||
KConfigLoader *configLoader = new KConfigLoader(cg, &xmlFile, this);
|
||||
|
@ -83,13 +108,7 @@ void GenericScriptedConfig::createUi()
|
|||
QUiLoader *loader = new QUiLoader(this);
|
||||
loader->setLanguageChangeEnabled(true);
|
||||
QFile uiFile(uiPath);
|
||||
// try getting a translation domain
|
||||
const QString metaDataPath =
|
||||
QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral(KWIN_NAME "/%1/%2/metadata.desktop").arg(typeName(), m_packageName));
|
||||
if (!metaDataPath.isNull()) {
|
||||
KDesktopFile metaData(metaDataPath);
|
||||
m_translator->setTranslationDomain(metaData.desktopGroup().readEntry("X-KWin-Config-TranslationDomain", QString()));
|
||||
}
|
||||
m_translator->setTranslationDomain(metaData.value("X-KWin-Config-TranslationDomain"));
|
||||
|
||||
uiFile.open(QFile::ReadOnly);
|
||||
QWidget *customConfigForm = loader->load(&uiFile, this);
|
||||
|
|
Loading…
Reference in a new issue