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:
@@ -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();
|
||||
}
|
||||
+86
@@ -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>
|
||||
Reference in New Issue
Block a user