30 if (qstrcmp(iface,
"KCModule") == 0) {
31 if (args.count() < 2) {
32 qWarning() << Q_FUNC_INFO <<
"expects two arguments (plugin id, package type)";
36 const QString pluginId = args.at(0).toString();
37 const QString packageType = args.at(1).toString();
39 if (packageType == QLatin1StringView(
"KWin/Effect")) {
41 }
else if (packageType == QLatin1StringView(
"KWin/Script")) {
44 qWarning() << Q_FUNC_INFO <<
"got unknown package type:" << packageType;
52 : KCModule(parent, KPluginMetaData())
53 , m_packageName(keyword)
54 , m_translator(new KLocalizedTranslator(this))
56 QCoreApplication::instance()->installTranslator(m_translator);
65 QVBoxLayout *layout =
new QVBoxLayout(widget());
67 const QString packageRoot = QStandardPaths::locate(QStandardPaths::GenericDataLocation,
68 QLatin1String(
"kwin/") +
typeName() + QLatin1Char(
'/') + m_packageName,
69 QStandardPaths::LocateDirectory);
70 if (packageRoot.isEmpty()) {
71 layout->addWidget(
new QLabel(i18nc(
"Error message",
"Could not locate package metadata")));
75 const KPluginMetaData metaData = KPluginMetaData::fromJsonFile(packageRoot + QLatin1String(
"/metadata.json"));
76 if (!metaData.isValid()) {
77 layout->addWidget(
new QLabel(i18nc(
"Required file does not exist",
"%1 does not contain a valid metadata.json file", qPrintable(packageRoot))));
81 const QString kconfigXTFile = packageRoot + QLatin1String(
"/contents/config/main.xml");
82 if (!QFileInfo::exists(kconfigXTFile)) {
83 layout->addWidget(
new QLabel(i18nc(
"Required file does not exist",
"%1 does not exist", qPrintable(kconfigXTFile))));
87 const QString uiPath = packageRoot + QLatin1String(
"/contents/ui/config.ui");
88 if (!QFileInfo::exists(uiPath)) {
89 layout->addWidget(
new QLabel(i18nc(
"Required file does not exist",
"%1 does not exist", qPrintable(uiPath))));
93 const QString localePath = packageRoot + QLatin1String(
"/contents/locale");
94 if (QFileInfo::exists(localePath)) {
95 KLocalizedString::addDomainLocaleDir(metaData.value(
"X-KWin-Config-TranslationDomain").toUtf8(), localePath);
98 QFile xmlFile(kconfigXTFile);
100 KConfigLoader *configLoader =
new KConfigLoader(cg, &xmlFile,
this);
102 QUiLoader *loader =
new QUiLoader(
this);
103 loader->setLanguageChangeEnabled(
true);
104 QFile uiFile(uiPath);
105 m_translator->setTranslationDomain(metaData.value(
"X-KWin-Config-TranslationDomain"));
107 uiFile.open(QFile::ReadOnly);
108 QWidget *customConfigForm = loader->load(&uiFile, widget());
109 m_translator->addContextToMonitor(customConfigForm->objectName());
113 QEvent le(QEvent::LanguageChange);
114 QCoreApplication::sendEvent(customConfigForm, &le);
116 layout->addWidget(customConfigForm);
117 addConfig(configLoader, customConfigForm);