diff --git a/src/scripting/genericscriptedconfig.cpp b/src/scripting/genericscriptedconfig.cpp index e2af3e74eb..dec9139b44 100644 --- a/src/scripting/genericscriptedconfig.cpp +++ b/src/scripting/genericscriptedconfig.cpp @@ -14,7 +14,6 @@ #include #define TRANSLATION_DOMAIN "kwin_scripting" -#include #include #include #include @@ -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);