Advance Wayland and KDE package bring-up

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
2026-04-14 10:51:06 +01:00
parent 51f3c21121
commit cf12defd28
15214 changed files with 20594243 additions and 269 deletions
@@ -0,0 +1,21 @@
# KI18N Translation Domain for this library
add_definitions(-DTRANSLATION_DOMAIN=\"kcm_kwin_scripts\")
kcmutils_add_qml_kcm(kcm_kwin_scripts INSTALL_NAMESPACE plasma/kcms/systemsettings)
target_sources(kcm_kwin_scripts PRIVATE
module.cpp
kwinscriptsdata.cpp
)
target_link_libraries(kcm_kwin_scripts PRIVATE
Qt::DBus
KF6::I18n
KF6::KCMUtilsCore
KF6::KCMUtils
KF6::Package
KF6::KCMUtilsQuick
)
install(FILES kwinscripts.knsrc DESTINATION ${KDE_INSTALL_KNSRCDIR})
@@ -0,0 +1,4 @@
#!bin/sh
$EXTRACTRC `find . -name \*.rc -o -name \*.ui -o -name \*.kcfg` >> rc.cpp
$XGETTEXT `find . -name \*.cc -o -name \*.cpp -o -name \*.h -o -name \*.qml` -o $podir/kcm_kwin_scripts.pot
rm -f rc.cpp
@@ -0,0 +1,140 @@
{
"KPlugin": {
"BugReportUrl": "https://bugs.kde.org/enter_bug.cgi?product=systemsettings&component=kcm_kwinscripts",
"Description": "Manage KWin scripts",
"Description[ar]": "أدر سكربتات كوين",
"Description[az]": "Kwin skriptlərini idarə edin",
"Description[be]": "Кіраванне скрыптамі KWin",
"Description[bg]": "Управление на скриптове на KWin",
"Description[ca@valencia]": "Gestiona els scripts de KWin",
"Description[ca]": "Gestiona els scripts del KWin",
"Description[cs]": "Spravovat skripty KWinu",
"Description[da]": "Adminstrér KWin-scripts",
"Description[de]": "KWin-Skripte verwalten",
"Description[en_GB]": "Manage KWin scripts",
"Description[eo]": "Administri KWin-skriptoj",
"Description[es]": "Gestión de guiones de KWin",
"Description[et]": "KWini skriptide haldamine",
"Description[eu]": "Kudeatu KWin gidoiak",
"Description[fi]": "Hallitse KWin-skriptejä",
"Description[fr]": "Gérer les scripts pour KWin",
"Description[gl]": "Xestiona os guións de KWin.",
"Description[he]": "ניהול סקריפטים של KWin",
"Description[hu]": "KWin parancsfájlok kezelése",
"Description[ia]": "Gere scriptos de KWin",
"Description[id]": "Kelola skrip KWin",
"Description[is]": "Umsjón með KWin-skriftum",
"Description[it]": "Gestisci gli script di KWin",
"Description[ja]": "Kwin スクリプトを管理",
"Description[ka]": "KWin-ის სკრიპტების მართვა",
"Description[ko]": "KWin 스크립트 관리",
"Description[lt]": "Tvarkyti KWin scenarijus",
"Description[lv]": "Pārvaldīt „KWin“ skriptus",
"Description[nb]": "Håndter KWin-skript",
"Description[nl]": "KWin-scripts beheren",
"Description[nn]": "Handsam KWin-skript",
"Description[pl]": "Zarządzanie skryptami KWin",
"Description[pt]": "Gerir os programas do KWin",
"Description[pt_BR]": "Gerencia os scripts do KWin",
"Description[ro]": "Gestionare scripturi KWin",
"Description[ru]": "Управление сценариями KWin",
"Description[sa]": "KWin स्क्रिप्ट् प्रबन्धयन्तु",
"Description[sk]": "Spravovať KWin skripty",
"Description[sl]": "Upravljajte skripte KWin",
"Description[sv]": "Hantera Kwin-skript",
"Description[ta]": "கேவின்னுக்கான சிறுநிரல்களை நிர்வகியுங்கள்",
"Description[tr]": "KWin Betiklerini Yönet",
"Description[uk]": "Керування скриптами KWin",
"Description[vi]": "Quản lí các kịch bản KWin",
"Description[x-test]": "xxManage KWin scriptsxx",
"Description[zh_CN]": "管理 KWin 脚本",
"Description[zh_TW]": "管理 KWin 文稿",
"Icon": "preferences-system-windows-actions",
"Name": "KWin Scripts",
"Name[ar]": "سكربتات كوين",
"Name[az]": "Kwin skriptləri",
"Name[be]": "Скрыпты KWin",
"Name[bg]": "Скриптове на KWin",
"Name[ca@valencia]": "Scripts de KWin",
"Name[ca]": "Scripts del KWin",
"Name[cs]": "Skripty KWinu",
"Name[da]": "KWin-scripts",
"Name[de]": "KWin-Skripte",
"Name[en_GB]": "KWin Scripts",
"Name[eo]": "KWin-Skriptoj",
"Name[es]": "Guiones de KWin",
"Name[et]": "KWini skriptid",
"Name[eu]": "KWin gidoiak",
"Name[fi]": "KWin-skriptit",
"Name[fr]": "Scripts pour KWin",
"Name[gl]": "Guións de KWin",
"Name[he]": "סקריפטים של KWin",
"Name[hu]": "KWin parancsfájlok",
"Name[ia]": "Script de KWin",
"Name[id]": "Skrip KWin",
"Name[is]": "KWin-skriftur",
"Name[it]": "Script di KWin",
"Name[ja]": "KWin スクリプト",
"Name[ka]": "KWin-ის სკრიპტები",
"Name[ko]": "KWin 스크립트",
"Name[lt]": "KWin scenarijai",
"Name[lv]": "„KWin“ skripti",
"Name[nb]": "KWin-skript",
"Name[nl]": "KWin-scripts",
"Name[nn]": "KWin-skript",
"Name[pl]": "Skrypty KWin",
"Name[pt]": "Programas do KWin",
"Name[pt_BR]": "Scripts do KWin",
"Name[ro]": "Scripturi KWin",
"Name[ru]": "Сценарии KWin",
"Name[sa]": "KWin स्क्रिप्ट्",
"Name[sk]": "KWin skripty",
"Name[sl]": "Skripti KWin",
"Name[sv]": "Kwin-skript",
"Name[ta]": "கேவின் சிறுநிரல்கள்",
"Name[tr]": "KWin Betikleri",
"Name[uk]": "Скрипти KWin",
"Name[vi]": "Kịch bản KWin",
"Name[x-test]": "xxKWin Scriptsxx",
"Name[zh_CN]": "KWin 脚本",
"Name[zh_TW]": "KWin 文稿"
},
"X-KDE-Keywords": "kwin script,plugins,window manager",
"X-KDE-Keywords[ar]": "كوين البرنامج النصي,والإضافات,ومدير النافذة",
"X-KDE-Keywords[bg]": "kwin скрипт,плъгини,мениджър на прозорци",
"X-KDE-Keywords[ca@valencia]": "script de kwin,connectors,gestor de finestres",
"X-KDE-Keywords[ca]": "script de kwin,connectors,gestor de finestres",
"X-KDE-Keywords[cs]": "skript kwinu,moduly,správce oken",
"X-KDE-Keywords[de]": "KWin-Skript,Module,Fensterverwaltung",
"X-KDE-Keywords[en_GB]": "kwin script,plugins,window manager",
"X-KDE-Keywords[es]": "guion de kwin,complementos,gestor de ventanas,administrador de ventanas",
"X-KDE-Keywords[eu]": "kwin gidoia,pluginak,leiho kudeatzailea",
"X-KDE-Keywords[fi]": "kwin-scripti,liitännäinen,liitännäiset,ikkunaohjelma,ikkunahallinta",
"X-KDE-Keywords[fr]": "script pour KWin, modules externes, gestionnaire de fenêtres",
"X-KDE-Keywords[gl]": "kwin script,script de kwin,guión de kwin,plugins,complementos,extensións,window manager,xestor de xanelas,xestor de ventás,xestor de fiestras",
"X-KDE-Keywords[he]": "סקריפט kwin,תוספים,מנהל חלונות",
"X-KDE-Keywords[hu]": "kwin parancsfájlok,bővítmények,ablakkezelő",
"X-KDE-Keywords[ia]": "script, plugins, gerente de fenestra de kwin",
"X-KDE-Keywords[is]": "kwin-skrifta,viðbætur,gluggastjóri",
"X-KDE-Keywords[it]": "script di kwin,estensioni,gestore delle finestre",
"X-KDE-Keywords[ka]": "kwin script,plugins,window manager,დამატებები,ფანჯრების მართვა,kwin-ის სკრიპტი",
"X-KDE-Keywords[ko]": "kwin 스크립트,플러그인,창 관리자",
"X-KDE-Keywords[lt]": "kwin scenarijus,kwin scenarijai,įskiepiai,iskiepiai,langų tvarkytuvė,langu tvarkytuve",
"X-KDE-Keywords[lv]": "kwin skripts,spraudņi,logu pārvaldnieks",
"X-KDE-Keywords[nb]": "kwin-skript,tillegg,programtillegg,vindusbehandler",
"X-KDE-Keywords[nl]": "kwin-script,plug-ins,vensterbeheerder",
"X-KDE-Keywords[nn]": "kwin-skript,tillegg,programtillegg,vindaugshandsamar",
"X-KDE-Keywords[pl]": "skrypt kwin,wtyczki,zarządzanie oknami",
"X-KDE-Keywords[pt_BR]": "kwin script,plugins,gerenciador de janelas",
"X-KDE-Keywords[ru]": "kwin script,plugins,window manager,сценарий,модули,диспетчер окон",
"X-KDE-Keywords[sa]": "kwin स्क्रिप्ट,प्लगिन्,विण्डो प्रबन्धक",
"X-KDE-Keywords[sl]": "skript kwin,vtičniki,upravljalnik okna",
"X-KDE-Keywords[sv]": "kwin-skript,insticksprogram,fönsterhanterare",
"X-KDE-Keywords[tr]": "kwin betiği,eklentiler,pencere yöneticisi",
"X-KDE-Keywords[uk]": "kwin script,plugins,window manager,скрипт квін,додатки,керування,вікна",
"X-KDE-Keywords[x-test]": "xxkwin scriptxx,xxpluginsxx,xxwindow managerxx",
"X-KDE-Keywords[zh_CN]": "kwin script,plugins,window manager,jiaoben,chajian,chuangkouguanliqi,kwin 脚本,插件,窗口管理器",
"X-KDE-Keywords[zh_TW]": "kwin 文稿,kwin 指令稿,插件,外掛程式,視窗管理員",
"X-KDE-System-Settings-Parent-Category": "windowmanagement",
"X-KDE-Weight": 50
}
@@ -0,0 +1,62 @@
[KNewStuff3]
Name=Window Manager Scripts
Name[ar]=سكربتات مدير النوافذ
Name[az]=Pəncərə Meneceri skriptləri
Name[be]=Скрыпты кіраўніка акон
Name[bg]=Скриптове на мениджър на прозорци
Name[ca]=Scripts del gestor de finestres
Name[ca@valencia]=Scripts del gestor de finestres
Name[cs]=Skripty správce oken
Name[da]=Vindueshåndteringsscripts
Name[de]=Fensterverwaltungs-Skripte
Name[el]=Σενάρια διαχειριστή παραθύρων
Name[en_GB]=Window Manager Scripts
Name[eo]=Fenestraj Administraj Skriptoj
Name[es]=Guiones del gestor de ventanas
Name[et]=Aknahalduri skriptid
Name[eu]=Leiho kudeatzailearen gidoiak
Name[fi]=Ikkunointiohjelman skriptit
Name[fr]=Scripts du gestionnaire de fenêtres
Name[gl]=Guións do xestor de xanelas
Name[he]=סקריפטים של מנהל חלונות
Name[hu]=Ablakkezelő szkriptek
Name[ia]=Gerente de scripts de fenestra
Name[id]=Skrip Pengelola Jendela
Name[is]=Gluggastjóraskriftur
Name[it]=Script del gestore delle finestre
Name[ja]=ウィンドウマネージャスクリプト
Name[ka]=ფანჯრების მმართველის სკრიპტები
Name[ko]=창 관리자 스크립트
Name[lt]=Langų tvarkytuvės scenarijai
Name[lv]=Logu pārvaldnieka skripti
Name[nb]=Skript for vindusbehandler
Name[nl]=Scripts van vensterbeheerder
Name[nn]=Skript for vindaugshandsamar
Name[pa]=ਵਿੰਡੋ ਮੈਨੇਜਰ ਸਕ੍ਰਿਪਟਾਂ
Name[pl]=Skrypty zarządzania oknami
Name[pt]=Programas do Gestor de Janelas
Name[pt_BR]=Scripts do gerenciador de janelas
Name[ro]=Scripturi pentru gestionar de ferestre
Name[ru]=Сценарии для диспетчера окон KWin
Name[sa]=विण्डो प्रबन्धक स्क्रिप्ट्
Name[sk]=Skripty správcu okien
Name[sl]=Skripti upravljalnika oken
Name[sr]=Скрипте менаџера прозора
Name[sr@ijekavian]=Скрипте менаџера прозора
Name[sr@ijekavianlatin]=Skripte menadžera prozora
Name[sr@latin]=Skripte menadžera prozora
Name[sv]=Fönsterhanteringsskript
Name[ta]=சாளர நிர்வாக சிறுநிரல்கள்
Name[tr]=Pencere Yöneticisi Betikleri
Name[uk]=Скрипти засобу керування вікнами
Name[vi]=Các kịch bản trình quản lí cửa sổ
Name[x-test]=xxWindow Manager Scriptsxx
Name[zh_CN]=窗口管理器脚本
Name[zh_TW]=視窗管理員指令稿
ProvidersUrl=https://autoconfig.kde.org/ocs/providers.xml
ContentWarning=Executables
Categories=Kwin Scripts Plasma 6
StandardResource=tmp
Uncompress=kpackage
KPackageStructure=KWin/Script
@@ -0,0 +1,40 @@
/*
SPDX-FileCopyrightText: 2020 Cyril Rossi <cyril.rossi@enioka.com>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "kwinscriptsdata.h"
#include <KConfigGroup>
#include <KPackage/Package>
#include <KPackage/PackageLoader>
#include <KPackage/PackageStructure>
#include <KPluginFactory>
KWinScriptsData::KWinScriptsData(QObject *parent)
: KCModuleData(parent)
, m_kwinConfig(KSharedConfig::openConfig("kwinrc"))
{
}
QList<KPluginMetaData> KWinScriptsData::pluginMetaDataList() const
{
const QString scriptFolder = QStringLiteral("kwin/scripts/");
return KPackage::PackageLoader::self()->findPackages(QStringLiteral("KWin/Script"), scriptFolder);
}
bool KWinScriptsData::isDefaults() const
{
QList<KPluginMetaData> plugins = pluginMetaDataList();
KConfigGroup cfgGroup(m_kwinConfig, QStringLiteral("Plugins"));
for (auto &plugin : plugins) {
if (cfgGroup.readEntry(plugin.pluginId() + QLatin1String("Enabled"), plugin.isEnabledByDefault()) != plugin.isEnabledByDefault()) {
return false;
}
}
return true;
}
#include "moc_kwinscriptsdata.cpp"
@@ -0,0 +1,29 @@
/*
SPDX-FileCopyrightText: 2020 Cyril Rossi <cyril.rossi@enioka.com>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#pragma once
#include <QList>
#include <QObject>
#include <KCModuleData>
#include <KPluginMetaData>
#include <KSharedConfig>
class KWinScriptsData : public KCModuleData
{
Q_OBJECT
public:
KWinScriptsData(QObject *parent);
bool isDefaults() const override;
QList<KPluginMetaData> pluginMetaDataList() const;
private:
KSharedConfigPtr m_kwinConfig;
};
@@ -0,0 +1,156 @@
/*
SPDX-FileCopyrightText: 2011 Tamas Krutki <ktamasw@gmail.com>
SPDX-FileCopyrightText: 2012 Martin Gräßlin <mgraesslin@kde.org>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "module.h"
#include <QDBusConnection>
#include <QDBusMessage>
#include <QDBusPendingCall>
#include <QFileDialog>
#include <QStringList>
#include <KCMultiDialog>
#include <KConfigGroup>
#include <KLocalizedString>
#include <KPackage/Package>
#include <KPackage/PackageJob>
#include <KPackage/PackageLoader>
#include <KSharedConfig>
#include "kwinscriptsdata.h"
Module::Module(QObject *parent, const KPluginMetaData &data)
: KQuickConfigModule(parent, data)
, m_kwinScriptsData(new KWinScriptsData(this))
, m_model(new KPluginModel(this))
{
// Hide the help button, because there is no help
setButtons(Apply | Default);
connect(m_model, &KPluginModel::isSaveNeededChanged, this, [this]() {
setNeedsSave(m_model->isSaveNeeded() || !m_pendingDeletions.isEmpty());
});
connect(m_model, &KPluginModel::defaulted, this, [this](bool defaulted) {
setRepresentsDefaults(defaulted);
});
m_model->setConfig(KSharedConfig::openConfig("kwinrc")->group(QStringLiteral("Plugins")));
}
void Module::onGHNSEntriesChanged()
{
m_model->clear();
m_model->addPlugins(m_kwinScriptsData->pluginMetaDataList(), QString());
}
void Module::importScript()
{
QFileDialog *dialog = new QFileDialog;
dialog->setAttribute(Qt::WA_DeleteOnClose);
dialog->setFileMode(QFileDialog::ExistingFile);
dialog->setWindowTitle(i18n("Import KWin Script"));
dialog->setNameFilter(i18n("KWin Script (*.kwinscript)"));
connect(dialog, &QFileDialog::accepted, this, [this, dialog] {
using namespace KPackage;
if (dialog->selectedFiles().isEmpty()) {
return;
}
auto job = PackageJob::update(QStringLiteral("KWin/Script"), dialog->selectedFiles().first());
connect(job, &KJob::result, this, [job, this]() {
if (job->error() != KJob::NoError) {
setErrorMessage(i18nc("Placeholder is error message returned from the install service", "Cannot import selected script.\n%1", job->errorString()));
return;
}
m_infoMessage = i18nc("Placeholder is name of the script that was imported", "The script \"%1\" was successfully imported.", job->package().metadata().name());
m_errorMessage.clear();
Q_EMIT messageChanged();
m_model->clear();
m_model->addPlugins(m_kwinScriptsData->pluginMetaDataList(), QString());
setNeedsSave(false);
});
});
dialog->open();
}
void Module::configure(const KPluginMetaData &data)
{
auto dialog = new KCMultiDialog();
dialog->addModule(data, QVariantList{data.pluginId(), QStringLiteral("KWin/Script")});
dialog->setAttribute(Qt::WA_DeleteOnClose);
dialog->show();
}
void Module::togglePendingDeletion(const KPluginMetaData &data)
{
if (m_pendingDeletions.contains(data)) {
m_pendingDeletions.removeOne(data);
} else {
m_pendingDeletions.append(data);
}
setNeedsSave(m_model->isSaveNeeded() || !m_pendingDeletions.isEmpty());
Q_EMIT pendingDeletionsChanged();
}
void Module::defaults()
{
m_model->defaults();
m_pendingDeletions.clear();
Q_EMIT pendingDeletionsChanged();
setNeedsSave(m_model->isSaveNeeded());
}
void Module::load()
{
m_model->clear();
m_model->addPlugins(m_kwinScriptsData->pluginMetaDataList(), QString());
m_pendingDeletions.clear();
Q_EMIT pendingDeletionsChanged();
setNeedsSave(false);
}
void Module::save()
{
using namespace KPackage;
for (const KPluginMetaData &info : std::as_const(m_pendingDeletions)) {
// We can get the package root from the entry path
QDir root = QFileInfo(info.fileName()).dir();
root.cdUp();
KJob *uninstallJob = PackageJob::uninstall(QStringLiteral("KWin/Script"), info.pluginId(), root.absolutePath());
connect(uninstallJob, &KJob::result, this, [this, uninstallJob]() {
if (!uninstallJob->errorString().isEmpty()) {
setErrorMessage(i18n("Error when uninstalling KWin Script: %1", uninstallJob->errorString()));
} else {
load(); // Make sure to reload the KCM to deleted entries to disappear
}
});
}
m_infoMessage.clear();
Q_EMIT messageChanged();
m_pendingDeletions.clear();
Q_EMIT pendingDeletionsChanged();
m_model->save();
QDBusMessage message = QDBusMessage::createMethodCall("org.kde.KWin", "/Scripting", "org.kde.kwin.Scripting", "start");
QDBusConnection::sessionBus().asyncCall(message);
setNeedsSave(false);
}
K_PLUGIN_FACTORY_WITH_JSON(KcmKWinScriptsFactory, "kcm_kwin_scripts.json",
registerPlugin<Module>();
registerPlugin<KWinScriptsData>();)
#include "module.moc"
#include "moc_module.cpp"
@@ -0,0 +1,83 @@
/*
SPDX-FileCopyrightText: 2011 Tamas Krutki <ktamasw@gmail.com>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#pragma once
#include <KCModule>
#include <KPackage/Package>
#include <KPluginMetaData>
#include <KPluginModel>
#include <KQuickConfigModule>
#include <QFileInfo>
class KJob;
class KWinScriptsData;
class Module : public KQuickConfigModule
{
Q_OBJECT
Q_PROPERTY(QAbstractItemModel *model READ model CONSTANT)
Q_PROPERTY(QList<KPluginMetaData> pendingDeletions READ pendingDeletions NOTIFY pendingDeletionsChanged)
Q_PROPERTY(QString errorMessage READ errorMessage NOTIFY messageChanged)
Q_PROPERTY(QString infoMessage READ infoMessage NOTIFY messageChanged)
public:
explicit Module(QObject *parent, const KPluginMetaData &data);
void load() override;
void save() override;
void defaults() override;
QAbstractItemModel *model() const
{
return m_model;
}
Q_INVOKABLE void togglePendingDeletion(const KPluginMetaData &data);
Q_INVOKABLE bool canDeleteEntry(const KPluginMetaData &data)
{
return QFileInfo(data.fileName()).isWritable();
}
QList<KPluginMetaData> pendingDeletions()
{
return m_pendingDeletions;
}
QString errorMessage() const
{
return m_errorMessage;
}
QString infoMessage() const
{
return m_infoMessage;
}
void setErrorMessage(const QString &message)
{
m_infoMessage.clear();
m_errorMessage = message;
Q_EMIT messageChanged();
}
/**
* Called when the import script button is clicked.
*/
Q_INVOKABLE void importScript();
Q_INVOKABLE void onGHNSEntriesChanged();
Q_INVOKABLE void configure(const KPluginMetaData &data);
Q_SIGNALS:
void messageChanged();
void pendingDeletionsChanged();
private:
KWinScriptsData *m_kwinScriptsData;
QList<KPluginMetaData> m_pendingDeletions;
KPluginModel *m_model;
QString m_errorMessage;
QString m_infoMessage;
};
@@ -0,0 +1,73 @@
/*
SPDX-FileCopyrightText: 2013 Antonis Tsiapaliokas <kok3rs@gmail.com>
SPDX-FileCopyrightText: 2019 Vlad Zahorodnii <vlad.zahorodnii@kde.org>
SPDX-License-Identifier: GPL-2.0-or-later
*/
import QtQuick
import QtQuick.Layouts
import org.kde.config
import org.kde.kirigami 2 as Kirigami
import org.kde.newstuff as NewStuff
import org.kde.kcmutils as KCMUtils
KCMUtils.ScrollViewKCM {
implicitWidth: Kirigami.Units.gridUnit * 22
implicitHeight: Kirigami.Units.gridUnit * 20
actions: [
Kirigami.Action {
icon.name: "document-import"
text: i18n("Install from File…")
onTriggered: kcm.importScript()
},
NewStuff.Action {
text: i18nc("@action:button get new KWin scripts", "Get New…")
visible: KAuthorized.authorize(KAuthorized.GHNS)
configFile: "kwinscripts.knsrc"
onEntryEvent: (entry, event) => {
if (event === NewStuff.Engine.StatusChangedEvent) {
kcm.onGHNSEntriesChanged()
}
}
}
]
header: ColumnLayout {
spacing: Kirigami.Units.smallSpacing
Kirigami.InlineMessage {
Layout.fillWidth: true
visible: kcm.errorMessage || kcm.infoMessage
type: kcm.errorMessage ? Kirigami.MessageType.Error : Kirigami.MessageType.Information
text: kcm.errorMessage || kcm.infoMessage
}
Kirigami.SearchField {
Layout.fillWidth: true
id: searchField
}
}
view: KCMUtils.PluginSelector {
id: selector
sourceModel: kcm.model
query: searchField.text
delegate: KCMUtils.PluginDelegate {
onConfigTriggered: kcm.configure(model.config)
additionalActions: [
Kirigami.Action {
enabled: kcm.canDeleteEntry(model.metaData)
icon.name: kcm.pendingDeletions.indexOf(model.metaData) === -1 ? "delete" : "edit-undo"
text: i18nc("@info:tooltip", "Delete…")
displayHint: Kirigami.DisplayHint.IconOnly
onTriggered: kcm.togglePendingDeletion(model.metaData)
}
]
}
}
}