diff --git a/CMakeLists.txt b/CMakeLists.txt index 0319f9eed7..e12afb35f7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,7 @@ project(KWin VERSION ${PROJECT_VERSION}) set(CMAKE_C_STANDARD 99) set(QT_MIN_VERSION "5.15.0") -set(KF5_MIN_VERSION "5.88") +set(KF5_MIN_VERSION "5.89") set(KDE_COMPILERSETTINGS_LEVEL "5.82") find_package(ECM ${KF5_MIN_VERSION} REQUIRED NO_MODULE) diff --git a/src/kcmkwin/kwinscripts/kwinscriptsdata.cpp b/src/kcmkwin/kwinscripts/kwinscriptsdata.cpp index 0453b7bc09..1bd3ac25a5 100644 --- a/src/kcmkwin/kwinscripts/kwinscriptsdata.cpp +++ b/src/kcmkwin/kwinscripts/kwinscriptsdata.cpp @@ -6,12 +6,11 @@ #include "kwinscriptsdata.h" -#include -#include +#include #include +#include #include -#include "kpluginselector.h" - +#include KWinScriptsData::KWinScriptsData(QObject *parent, const QVariantList &args) : KCModuleData(parent, args) @@ -19,25 +18,22 @@ KWinScriptsData::KWinScriptsData(QObject *parent, const QVariantList &args) { } -QList KWinScriptsData::pluginInfoList() const +QVector KWinScriptsData::pluginMetaDataList() const { auto filter = [](const KPluginMetaData &md) { return md.isValid() && !md.rawData().value("X-KWin-Exclude-Listing").toBool(); }; const QString scriptFolder = QStringLiteral("kwin/scripts/"); - const auto scripts = KPackage::PackageLoader::self()->findPackages(QStringLiteral("KWin/Script"), scriptFolder, filter); - - return KPluginInfo::fromMetaData(scripts.toVector()); + return KPackage::PackageLoader::self()->findPackages(QStringLiteral("KWin/Script"), scriptFolder, filter).toVector(); } bool KWinScriptsData::isDefaults() const { - QList scriptinfos = pluginInfoList(); + QVector plugins = pluginMetaDataList(); KConfigGroup cfgGroup(m_kwinConfig, "Plugins"); - for (auto &script : scriptinfos) { - script.load(cfgGroup); - if (script.isPluginEnabled() != script.isPluginEnabledByDefault()) { + for (auto &plugin : plugins) { + if (cfgGroup.readEntry(plugin.pluginId() + QLatin1String("Enabled"), plugin.isEnabledByDefault()) != plugin.isEnabledByDefault()) { return false; } } diff --git a/src/kcmkwin/kwinscripts/kwinscriptsdata.h b/src/kcmkwin/kwinscripts/kwinscriptsdata.h index fe37f7ace7..159000fa54 100644 --- a/src/kcmkwin/kwinscripts/kwinscriptsdata.h +++ b/src/kcmkwin/kwinscripts/kwinscriptsdata.h @@ -8,10 +8,10 @@ #define KWINSCRIPTSDATA_H #include -#include +#include #include -#include +#include #include class KWinScriptsData : public KCModuleData @@ -23,7 +23,7 @@ public: bool isDefaults() const override; - QList pluginInfoList() const; + QVector pluginMetaDataList() const; private: KSharedConfigPtr m_kwinConfig; diff --git a/src/kcmkwin/kwinscripts/module.cpp b/src/kcmkwin/kwinscripts/module.cpp index f704fc3565..420e53aa5a 100644 --- a/src/kcmkwin/kwinscripts/module.cpp +++ b/src/kcmkwin/kwinscripts/module.cpp @@ -16,13 +16,14 @@ #include #include +#include #include -#include #include #include -#include #include +#include #include +#include #include @@ -54,24 +55,25 @@ Module::Module(QWidget *parent, const QVariantList &args) : ui->ghnsButton->setConfigFile(QStringLiteral("kwinscripts.knsrc")); connect(ui->ghnsButton, &KNS3::Button::dialogFinished, this, [this](const KNS3::Entry::List &changedEntries) { if (!changedEntries.isEmpty()) { - ui->scriptSelector->clearPlugins(); + ui->scriptSelector->clear(); updateListViewContents(); } }); - connect(ui->scriptSelector, &KPluginSelector::changed, this, [this](bool isChanged){ + ui->scriptSelector->setConfig(m_kwinConfig->group("Plugins")); + connect(ui->scriptSelector, &KPluginWidget::changed, this, [this](bool isChanged) { Q_EMIT changed(isChanged || !m_pendingDeletions.isEmpty()); }); - connect(ui->scriptSelector, &KPluginSelector::defaulted, this, [this](bool isDefaulted){ + connect(ui->scriptSelector, &KPluginWidget::defaulted, this, [this](bool isDefaulted) { Q_EMIT defaulted(isDefaulted && m_pendingDeletions.isEmpty()); }); - connect(this, &Module::defaultsIndicatorsVisibleChanged, ui->scriptSelector, &KPluginSelector::setDefaultsIndicatorsVisible); + connect(this, &Module::defaultsIndicatorsVisibleChanged, ui->scriptSelector, &KPluginWidget::setDefaultsIndicatorsVisible); connect(ui->importScriptButton, &QPushButton::clicked, this, &Module::importScript); - ui->scriptSelector->setAdditionalButtonHandler([this](const KPluginInfo &info) { + ui->scriptSelector->setAdditionalButtonHandler([this](const KPluginMetaData &info) { QPushButton *button = new QPushButton(ui->scriptSelector); button->setIcon(QIcon::fromTheme(QStringLiteral("delete"))); - button->setEnabled(QFileInfo(info.entryPath()).isWritable()); + button->setEnabled(QFileInfo(info.fileName()).isWritable()); connect(button, &QPushButton::clicked, this, [this, info]() { if (m_pendingDeletions.contains(info)) { m_pendingDeletions.removeOne(info); @@ -145,7 +147,8 @@ void Module::importScriptInstallFinished(KJob *job) void Module::updateListViewContents() { - ui->scriptSelector->addPlugins(m_kwinScriptsData->pluginInfoList(), KPluginSelector::ReadConfigFile, QString(), QString(), m_kwinConfig); + ui->scriptSelector->clear(); + ui->scriptSelector->addPlugins(m_kwinScriptsData->pluginMetaDataList(), QString()); } void Module::defaults() @@ -160,7 +163,6 @@ void Module::load() m_pendingDeletions.clear(); Q_EMIT pendingDeletionsChanged(); updateListViewContents(); - ui->scriptSelector->load(); Q_EMIT changed(false); } @@ -169,13 +171,12 @@ void Module::save() { using namespace KPackage; PackageStructure *structure = PackageLoader::self()->loadPackageStructure(QStringLiteral("KWin/Script")); - for (const KPluginInfo &info : qAsConst(m_pendingDeletions)) { + for (const KPluginMetaData &info : qAsConst(m_pendingDeletions)) { // We can get the package root from the entry path - QDir root = QFileInfo(info.entryPath()).dir(); + QDir root = QFileInfo(info.fileName()).dir(); root.cdUp(); - KJob *uninstallJob = Package(structure).uninstall(info.pluginName(), root.absolutePath()); - connect(uninstallJob, &KJob::result, this, [this, uninstallJob](){ - ui->scriptSelector->clearPlugins(); + KJob *uninstallJob = Package(structure).uninstall(info.pluginId(), root.absolutePath()); + connect(uninstallJob, &KJob::result, this, [this, uninstallJob]() { updateListViewContents(); // If the uninstallation is successful the entry will be immediately removed if (!uninstallJob->errorString().isEmpty()) { diff --git a/src/kcmkwin/kwinscripts/module.h b/src/kcmkwin/kwinscripts/module.h index 8e2be5148a..0ed986050d 100644 --- a/src/kcmkwin/kwinscripts/module.h +++ b/src/kcmkwin/kwinscripts/module.h @@ -8,8 +8,8 @@ #define MODULE_H #include +#include #include -#include namespace Ui { @@ -62,7 +62,7 @@ private: void updateListViewContents(); KSharedConfigPtr m_kwinConfig; KWinScriptsData *m_kwinScriptsData; - QList m_pendingDeletions; + QList m_pendingDeletions; }; #endif // MODULE_H diff --git a/src/kcmkwin/kwinscripts/module.ui b/src/kcmkwin/kwinscripts/module.ui index 6a4215ba82..bddf078de9 100644 --- a/src/kcmkwin/kwinscripts/module.ui +++ b/src/kcmkwin/kwinscripts/module.ui @@ -18,7 +18,7 @@ - + 0 @@ -74,9 +74,9 @@ - KPluginSelector + KPluginWidget QWidget -
kpluginselector.h
+
kpluginwidget.h
1