From 3af30c42505f981f77c1b5a883257c96456beedf Mon Sep 17 00:00:00 2001 From: Vlad Zahorodnii Date: Thu, 19 Oct 2023 21:13:10 +0300 Subject: [PATCH] kcms/screenedges: Fix Overview not being displayed Scripted and builtin effect metadata formats are no longer compatible. So KPackageLoader doesn't list builtin effects anymore. To address that, load builtin effect metadata manually. --- src/kcms/screenedges/main.cpp | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/kcms/screenedges/main.cpp b/src/kcms/screenedges/main.cpp index 6747508157..0d961a4185 100644 --- a/src/kcms/screenedges/main.cpp +++ b/src/kcms/screenedges/main.cpp @@ -119,6 +119,31 @@ void KWinScreenEdgesConfig::defaults() //----------------------------------------------------------------------------- // Monitor +static QList listBuiltinEffects() +{ + const QString rootDirectory = QStandardPaths::locate(QStandardPaths::GenericDataLocation, + QStringLiteral("kwin/builtin-effects"), + QStandardPaths::LocateDirectory); + + QList ret; + + const QStringList nameFilters{QStringLiteral("*.json")}; + QDirIterator it(rootDirectory, nameFilters, QDir::Files); + while (it.hasNext()) { + it.next(); + if (const KPluginMetaData metaData = KPluginMetaData::fromJsonFile(it.filePath()); metaData.isValid()) { + ret.append(metaData); + } + } + + return ret; +} + +static QList listScriptedEffects() +{ + return KPackage::PackageLoader::self()->listPackages(QStringLiteral("KWin/Effect"), QStringLiteral("kwin/effects/")); +} + void KWinScreenEdgesConfig::monitorInit() { m_form->monitorAddItem(i18n("No Action")); @@ -139,7 +164,7 @@ void KWinScreenEdgesConfig::monitorInit() m_form->monitorAddItem(i18n("Toggle alternative window switching")); KConfigGroup config(m_config, "Plugins"); - const auto effects = KPackage::PackageLoader::self()->listPackages(QStringLiteral("KWin/Effect"), QStringLiteral("kwin/builtin-effects/")) << KPackage::PackageLoader::self()->listPackages(QStringLiteral("KWin/Effect"), QStringLiteral("kwin/effects/")); + const auto effects = listBuiltinEffects() << listScriptedEffects(); for (const KPluginMetaData &effect : effects) { if (!effect.value(QStringLiteral("X-KWin-Border-Activate"), false)) {