kwinscripts kcm: Port to new KPluginWidget class
Task: https://phabricator.kde.org/T12265
This commit is contained in:
parent
4d7f1d1358
commit
bd17ca0110
6 changed files with 33 additions and 36 deletions
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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()) {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in a new issue