kwinscripts kcm: Port to new KPluginWidget class

Task: https://phabricator.kde.org/T12265
This commit is contained in:
Alexander Lohnau 2021-11-17 18:15:56 +01:00
parent 4d7f1d1358
commit bd17ca0110
6 changed files with 33 additions and 36 deletions

View file

@ -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)

View file

@ -6,12 +6,11 @@
#include "kwinscriptsdata.h"
#include <KPluginFactory>
#include <KPackage/PackageLoader>
#include <KConfigGroup>
#include <KPackage/Package>
#include <KPackage/PackageLoader>
#include <KPackage/PackageStructure>
#include "kpluginselector.h"
#include <KPluginFactory>
KWinScriptsData::KWinScriptsData(QObject *parent, const QVariantList &args)
: KCModuleData(parent, args)
@ -19,25 +18,22 @@ KWinScriptsData::KWinScriptsData(QObject *parent, const QVariantList &args)
{
}
QList<KPluginInfo> KWinScriptsData::pluginInfoList() const
QVector<KPluginMetaData> 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<KPluginInfo> scriptinfos = pluginInfoList();
QVector<KPluginMetaData> 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;
}
}

View file

@ -8,10 +8,10 @@
#define KWINSCRIPTSDATA_H
#include <QObject>
#include <QList>
#include <QVector>
#include <KCModuleData>
#include <KPluginInfo>
#include <KPluginMetaData>
#include <KSharedConfig>
class KWinScriptsData : public KCModuleData
@ -23,7 +23,7 @@ public:
bool isDefaults() const override;
QList<KPluginInfo> pluginInfoList() const;
QVector<KPluginMetaData> pluginMetaDataList() const;
private:
KSharedConfigPtr m_kwinConfig;

View file

@ -16,13 +16,14 @@
#include <QDBusPendingCall>
#include <KAboutData>
#include <KConfigGroup>
#include <KLocalizedString>
#include <KPluginFactory>
#include <KMessageBox>
#include <KMessageWidget>
#include <KPackage/PackageLoader>
#include <KPackage/Package>
#include <KPackage/PackageLoader>
#include <KPackage/PackageStructure>
#include <KPluginFactory>
#include <KNewStuff3/KNS3/Button>
@ -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()) {

View file

@ -8,8 +8,8 @@
#define MODULE_H
#include <KCModule>
#include <KPluginMetaData>
#include <KSharedConfig>
#include <KPluginInfo>
namespace Ui
{
@ -62,7 +62,7 @@ private:
void updateListViewContents();
KSharedConfigPtr m_kwinConfig;
KWinScriptsData *m_kwinScriptsData;
QList<KPluginInfo> m_pendingDeletions;
QList<KPluginMetaData> m_pendingDeletions;
};
#endif // MODULE_H

View file

@ -18,7 +18,7 @@
<widget class="KMessageWidget" name="messageWidget" native="true"/>
</item>
<item>
<widget class="KPluginSelector" name="scriptSelector" native="true">
<widget class="KPluginWidget" name="scriptSelector" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
@ -74,9 +74,9 @@
</widget>
<customwidgets>
<customwidget>
<class>KPluginSelector</class>
<class>KPluginWidget</class>
<extends>QWidget</extends>
<header>kpluginselector.h</header>
<header>kpluginwidget.h</header>
<container>1</container>
</customwidget>
<customwidget>