milestone: 22 KF6 enabled, blake3 placeholders removed, text-login fixed

- kf6-knewstuff/kwallet: removed all-zero blake3 placeholders
- CONSOLE-TO-KDE-DESKTOP-PLAN.md: 20→22 KF6 enabled count
- BOOT-PROCESS-IMPROVEMENT-PLAN.md: text-login→graphical greeter path
- D-Bus session/kwin compositor/sessiond enhancements from Wave tasks
- Only kirigami remains suppressed (QML-dependent, environmental gate)

Zero warnings. 24 commits total.
This commit is contained in:
2026-04-29 14:48:47 +01:00
parent cb2e75e640
commit edb68153e3
621 changed files with 1034826 additions and 223 deletions
@@ -0,0 +1,4 @@
# SPDX-FileCopyrightText: Dan Leinir Turthra Jensen <admin@leinir.dk>
# SPDX-License-Identifier: BSD-2-Clause
add_subdirectory(knewstuff-dialog)
@@ -0,0 +1,29 @@
# SPDX-FileCopyrightText: Dan Leinir Turthra Jensen <admin@leinir.dk>
# SPDX-License-Identifier: BSD-2-Clause
set(knewstuff-dialog_SRCS
main.cpp
knsrcmodel.cpp
)
qt_add_resources(RESOURCES resources.qrc)
add_executable(knewstuff-dialog6 ${knewstuff-dialog_SRCS} ${RESOURCES})
target_link_libraries(knewstuff-dialog6
Qt6::Core
Qt6::Gui
Qt6::Widgets
Qt6::Qml
Qt6::Quick
KF6::ConfigCore
KF6::I18n
KF6::NewStuffCore
)
target_link_libraries(knewstuff-dialog6
KF6::I18nQml
)
install(TARGETS knewstuff-dialog6 ${KF_INSTALL_TARGETS_DEFAULT_ARGS})
install(FILES org.kde.knewstuff-dialog6.desktop DESTINATION ${KDE_INSTALL_APPDIR})
@@ -0,0 +1,77 @@
/*
SPDX-FileCopyrightText: 2020 Dan Leinir Turthra Jensen <admin@leinir.dk>
SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
*/
#include "knsrcmodel.h"
#include "enginebase.h"
#include <KConfig>
#include <KConfigGroup>
#include <QDir>
KNSRCModel::KNSRCModel(QObject *parent)
: QAbstractListModel(parent)
{
const QStringList files = KNSCore::EngineBase::availableConfigFiles();
for (const auto &file : files) {
KConfig conf(file);
KConfigGroup group;
if (conf.hasGroup(QStringLiteral("KNewStuff3"))) {
group = conf.group(QStringLiteral("KNewStuff3"));
} else if (conf.hasGroup(QStringLiteral("KNewStuff"))) {
group = conf.group(QStringLiteral("KNewStuff"));
} else {
qWarning() << file << "doesn't contain a KNewStuff (or KNewStuff3) section.";
continue;
}
QString constructedName{QFileInfo(file).fileName()};
constructedName = constructedName.left(constructedName.length() - 6);
constructedName.replace(QLatin1Char{'_'}, QLatin1Char{' '});
constructedName[0] = constructedName[0].toUpper();
Entry *entry = new Entry;
entry->name = group.readEntry("Name", constructedName);
entry->filePath = file;
m_entries << entry;
}
std::sort(m_entries.begin(), m_entries.end(), [](const Entry *a, const Entry *b) -> bool {
return QString::localeAwareCompare(b->name, a->name) > 0;
});
}
KNSRCModel::~KNSRCModel() = default;
QHash<int, QByteArray> KNSRCModel::roleNames() const
{
static const QHash<int, QByteArray> roleNames{{NameRole, "name"}, {FilePathRole, "filePath"}};
return roleNames;
}
int KNSRCModel::rowCount(const QModelIndex &parent) const
{
if (parent.isValid()) {
return 0;
}
return m_entries.count();
}
QVariant KNSRCModel::data(const QModelIndex &index, int role) const
{
if (checkIndex(index)) {
Entry *entry = m_entries[index.row()];
switch (role) {
case NameRole:
return entry->name;
case FilePathRole:
return entry->filePath;
}
}
return QVariant();
}
#include "moc_knsrcmodel.cpp"
@@ -0,0 +1,37 @@
/*
SPDX-FileCopyrightText: 2020 Dan Leinir Turthra Jensen <admin@leinir.dk>
SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
*/
#ifndef KNSRCMODEL_H
#define KNSRCMODEL_H
#include <QAbstractListModel>
#include <QUrl>
class KNSRCModel : public QAbstractListModel
{
Q_OBJECT
public:
explicit KNSRCModel(QObject *parent = nullptr);
~KNSRCModel() override;
enum Roles {
NameRole = Qt::UserRole + 1,
FilePathRole,
};
QHash<int, QByteArray> roleNames() const override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
private:
struct Entry {
QString name;
QString filePath;
};
QList<Entry *> m_entries;
};
#endif // KNSRCMODEL_H
@@ -0,0 +1,74 @@
/*
This file is part of KNewStuff2.
SPDX-FileCopyrightText: 2019 Dan Leinir Turthra Jensen <admin@leinir.dk>
SPDX-License-Identifier: LGPL-2.1-or-later
*/
#include "knsrcmodel.h"
#include <KLocalizedQmlContext>
#include <KLocalizedString>
#include <QApplication>
#include <QCommandLineOption>
#include <QCommandLineParser>
#include <QQmlApplicationEngine>
#include <QQmlContext>
int main(int argc, char **argv)
{
QApplication app(argc, argv);
QCoreApplication::setApplicationName(QStringLiteral("knewstuff-dialog"));
QCoreApplication::setApplicationVersion(QStringLiteral("1.0"));
QCoreApplication::setOrganizationDomain(QStringLiteral("kde.org"));
KLocalizedString::setApplicationDomain("knewstuff-dialog");
QCommandLineParser *parser = new QCommandLineParser;
parser->addHelpOption();
parser->addPositionalArgument(QStringLiteral("knsrcfile"),
i18n("The KNSRC file you want to show. If none is passed, you will be presented with a dialog which lets you switch between "
"all the config files installed into the systemwide knsrc file location"));
parser->addOption(
QCommandLineOption(QStringLiteral("url"),
i18n("A kns url to show information from. The format for a kns url is kns://knsrcfile/providerid/entryid\n'knsrcfile'\nis the name "
"of a knsrc file as might be passed directly through this tool's knsrcfile argument\n'providerid'\nis the hostname of the "
"provider the entry should exist on\n'entryid'\nis the unique ID of an entry found in the provider specified by the knsrc "
"file.\n An example of such a url is kns://sddmtheme.knsrc/api.kde-look.org/2059021"),
QStringLiteral("knsurl")));
parser->process(app);
QQmlApplicationEngine *appengine = new QQmlApplicationEngine();
qmlRegisterType<KNSRCModel>("org.kde.newstuff.tools.dialog", 1, 0, "KNSRCModel");
auto *context = new KLocalizedQmlContext(appengine);
context->setTranslationDomain(QStringLiteral("knewstuff6"));
appengine->rootContext()->setContextObject(context);
if (parser->optionNames().contains(QStringLiteral("url"))) {
const QUrl url(parser->value(QStringLiteral("url")));
Q_ASSERT(url.isValid());
Q_ASSERT(url.scheme() == QLatin1String("kns"));
const QString knsrcfile{url.host()};
const QStringList pathParts = url.path().split(QLatin1Char('/'), Qt::SkipEmptyParts);
const QString providerId = pathParts.at(0);
const QString entryId = pathParts.at(1);
if (pathParts.size() != 2) {
qWarning() << "wrong format in the url path" << url << pathParts;
}
Q_ASSERT(!providerId.isEmpty() && !entryId.isEmpty());
appengine->rootContext()->setContextProperty(QStringLiteral("knsrcfile"), knsrcfile);
appengine->rootContext()->setContextProperty(QStringLiteral("knsProviderId"), providerId);
appengine->rootContext()->setContextProperty(QStringLiteral("knsEntryId"), entryId);
appengine->load(QStringLiteral("qrc:/qml/dialog.qml"));
} else if (!parser->positionalArguments().isEmpty()) {
appengine->rootContext()->setContextProperty(QStringLiteral("knsrcfile"), parser->positionalArguments().first());
appengine->load(QStringLiteral("qrc:/qml/dialog.qml"));
} else {
appengine->load(QStringLiteral("qrc:/qml/main.qml"));
}
return app.exec();
}
@@ -0,0 +1,86 @@
# SPDX-License-Identifier: CC0-1.0
# SPDX-FileCopyrightText: 2023 Nate Graham <nate@kde.org>
[Desktop Entry]
Categories=Qt;KDE;Utility;
Comment=Showcase for KNewStuff add-on downloading functionality
Comment[ar]=عرض لوظيفة التنزيل الإضافية لـ Knowstuff
Comment[az]=KNewStuff əlavəsinin endirmə imkanının nümayişi
Comment[bg]=Показване на функционалността за изтегляне на добавката за KNewStuff
Comment[ca]=Presentació de la funcionalitat de baixada de complements per al KNewStuff
Comment[ca@valencia]=Presentació de la funcionalitat de baixada de complements per a KNewStuff
Comment[de]=Beispiel für die Download-Funktion von Erweiterungen mittels KNewStuff
Comment[en_GB]=Showcase for KNewStuff add-on downloading functionality
Comment[eo]=Montrofenestro por elŝuta funkcio de KNewStuff-aldonaĵo
Comment[es]=Presentación de la funcionalidad de descarga del complemento KNewStuff
Comment[eu]=«KNewStuff»eren gehigarriaren zama-jaisteko funtzionaltasunaren erakusleihoa
Comment[fi]=Näyte KNewStuffin lisäosien lataustoiminnallisuudesta
Comment[fr]=Vitrine pour la fonctionnalité de téléchargement du module additionnel pour KNewStuff
Comment[gl]=Demostración da funcionalidade de descarga de complementos de KNewStuff.
Comment[he]=הפגנת יכולות של הורדת תוספים עם KNewStuff
Comment[hu]=A KNewStuff kiegészítőletöltési funkcionalitásának bemutatása
Comment[ia]=Vitrina per addon de KNewStuff con functioinalitate de discargar
Comment[it]=Vetrina per la funzionalità di scaricamento dei componenti aggiuntivi di KNewStuff
Comment[ka]=KNewStuff-ის დამატების გადმოწერის ფუნქციონალის საჩვენებელი მაგალითი
Comment[ko]=KNewStuff 추가 기능 다운로드 데모
Comment[lt]=KNewStuff papildinių atsiuntimo funkcionalumo demonstravimas
Comment[lv]=„KNewStuff“ pielikuma lejupielāžu funkcionalitātes parādīšana
Comment[nl]=Showcase voor KNewStuff functionaliteit van downloaden van add-on
Comment[nn]=Framvising av KNewStuff-tillegg for nedlastingsfunksjonalitet
Comment[pl]=Przedstawienie możliwości pobierania dodatków przez KNewStuff
Comment[pt]=Demonstração da funcionalidade de transferência de extensões do KNewStuff
Comment[pt_BR]=Demonstração da funcionalidade de download do complemento do KNewStuff
Comment[ro]=Demonstrează funcționalitatea KNewStuff de descărcare a extensiilor
Comment[ru]=Демонстрация возможностей загрузки дополнений KNewStuff
Comment[sa]=KNewStuff ऐड-ऑन् डाउनलोडिंग् कार्यक्षमतायाः कृते शोकेस्
Comment[sk]=Výkladná skriňa pre funkcionalitu sťahovania addonov KNewStuff
Comment[sl]=Vzorčna predstavitev funkcionalnosti prenosa dodatkov aplikacije knowStuff
Comment[sv]=Uppvisning av nedladdningsfunktionalitet för Heta nyheter
Comment[tr]=KNewStuff eklenti indirme işlevi için örnek
Comment[uk]=Демонстрація можливості отримання додатків у KNewStuff
Comment[x-test]=xxShowcase for KNewStuff add-on downloading functionalityxx
Comment[zh_CN]=演示 KNewStuff 的附加组件下载功能
Comment[zh_TW]=KNewStuff 外掛程式下載功能的展示
Exec=knewstuff-dialog6
Icon=get-hot-new-stuff
Name=KNewStuff Dialog
Name[ar]=حواريّ KNewStuff
Name[az]=KNewStuff dialoqu
Name[bg]=Диалогов прозорец на KNewStuff
Name[ca]=Diàleg del KNewStuff
Name[ca@valencia]=Diàleg de KNewStuff
Name[de]=KNewStuff-Dialog
Name[en_GB]=KNewStuff Dialog
Name[eo]=KNewStuff-Dialogo
Name[es]=Diálogo de KNewStuff
Name[eu]=«KNewStuff» elkarrizketa-koadroa
Name[fi]=KNewStuff-kyselyikkuna
Name[fr]=Boîte de dialogue de KNewStuff
Name[gl]=Diálogo de KNewStuff
Name[he]=חלונית KNewStuff
Name[hu]=KNewStuff párbeszédablak
Name[ia]=Dialogo de KNewStuff
Name[it]=Finestra di KNewStuff
Name[ka]=KNewStuff -ის ფანჯარა
Name[ko]=KNewStuff 대화 상자
Name[lt]=KNewStuff dialogas
Name[lv]=„KNewStuff“ logs
Name[nl]=Dialoog van KNewStuff
Name[nn]=KNewStuff-vindauge
Name[pl]=Okno dialogowe KNewStuff
Name[pt]=Janela do KNewStuff
Name[pt_BR]=Janela do KNewStuff
Name[ro]=Dialog KNewStuff
Name[ru]=Диалог KNewStuff
Name[sa]=KNewStuff संवाद
Name[sk]=Dialóg KNewStuff
Name[sl]=Dialog KNewStuff
Name[sv]=Heta nyheter dialogruta
Name[tr]=KNewStuff İletişim Kutusu
Name[uk]=Вікно KNewStuff
Name[x-test]=xxKNewStuff Dialogxx
Name[zh_CN]=KNewStuff 对话框
Name[zh_TW]=KNewStuff 對話框
# This is more of an internal utility, so hide it from users
NoDisplay=true
SingleMainWindow=true
Type=Application
@@ -0,0 +1,24 @@
/*
SPDX-FileCopyrightText: 2019 Dan Leinir Turthra Jensen <admin@leinir.dk>
SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
*/
import QtQuick
import org.kde.newstuff as NewStuff
NewStuff.Dialog {
id: component
configFile: knsrcfile
Component.onCompleted: {
open();
if (typeof(knsProviderId) !== "undefined" && typeof(knsEntryId) !== "undefined") {
showEntryDetails(knsProviderId, knsEntryId);
}
}
onVisibleChanged: {
if (visible === false) {
Qt.quit();
}
}
}
@@ -0,0 +1,79 @@
/*
SPDX-FileCopyrightText: 2019 Dan Leinir Turthra Jensen <admin@leinir.dk>
SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
*/
import QtQuick
import org.kde.kirigami as Kirigami
import org.kde.newstuff as NewStuff
import org.kde.newstuff.tools.dialog as Myself
Kirigami.ApplicationWindow {
id: root;
title: "KNewStuff Dialog"
globalDrawer: Kirigami.GlobalDrawer {
id: globalDrawer
title: "KNewStuff Dialog"
titleIcon: "get-hot-new-stuff"
drawerOpen: true
modal: false
actions: []
Instantiator {
id: configsInstantiator
model: Myself.KNSRCModel {}
Kirigami.Action {
text: model.name
icon.name: "get-hot-new-stuff"
onTriggered: {
pageStack.clear();
pageStack.push(mainPageComponent, { configFile: model.filePath });
}
}
onObjectAdded: (idx, object) => globalDrawer.actions.push(object);
}
}
contextDrawer: Kirigami.ContextDrawer {
id: contextDrawer
}
pageStack.defaultColumnWidth: pageStack.width
Component {
id: mainPageComponent
NewStuff.Page { }
}
Component {
id: startPageComponent
Kirigami.AboutPage {
aboutData: {
"displayName": "KNewStuff Dialog",
"productName": "org.kde.knewstuff.tools.dialog",
"programLogo": "get-hot-new-stuff",
"componentName": "knewstuff-dialog",
"shortDescription": "Get All Your Hot New Stuff",
"homepage": "https://kde.org/",
"bugAddress": "https://bugs.kde.org/",
"version": "v1.0",
"otherText": "",
"authors": [
{
"name": "Dan Leinir Turthra Jensen\n",
"task": "Lead Developer",
"emailAddress": "admin@leinir.dk",
"webAddress": "https://leinir.dk/",
"ocsUsername": "leinir",
},
],
"credits": [],
"translators": [],
"copyrightStatement": "© 2020 The KDE Community",
"desktopFileName": "org.kde.knewstuff.tools.dialog",
}
}
}
Component.onCompleted: {
pageStack.push(startPageComponent);
}
}
@@ -0,0 +1,10 @@
<RCC>
<!--
SPDX-FileCopyrightText: none
SPDX-License-Identifier: CC0-1.0
-->
<qresource prefix="/">
<file>qml/dialog.qml</file>
<file>qml/main.qml</file>
</qresource>
</RCC>