[utilities/kdebugsettings] src: Fix using role in quick version + keep using display for widget version
Laurent Montel <[email protected]>
| Newsgroups | gmane.comp.kde.cvs |
|---|---|
| Message-ID | <[email protected]> |
Git commit d43672060ecda97c5c5720189e98efccab0e8b5d by Laurent Montel.
Committed on 18/07/2026 at 19:54.
Pushed by mlaurent into branch 'master'.
Fix using role in quick version + keep using display for widget version
M +32 -9 src/core/model/kdeapplicationloggingcategorymodel.cpp
M +2 -1 src/quickapps/contents/ui/KDEApplicationRulesPage.qml
https://invent.kde.org/utilities/kdebugsettings/-/commit/d43672060ecda97c5c5720189e98efccab0e8b5d
diff --git a/src/core/model/kdeapplicationloggingcategorymodel.cpp b/src/core/model/kdeapplicationloggingcategorymodel.cpp
index acb6efcd..5158ccce 100644
--- a/src/core/model/kdeapplicationloggingcategorymodel.cpp
+++ b/src/core/model/kdeapplicationloggingcategorymodel.cpp
@@ -8,11 +8,22 @@
#include "kdebugsettingscore_debug.h"
#include "kdebugsettingsutil.h"
+namespace
+{
+constexpr int qmlRole(KDEApplicationLoggingCategoryModel::CategoryRoles role)
+{
+ return static_cast<int>(Qt::UserRole) + static_cast<int>(role) + 1;
+}
+}
+
KDEApplicationLoggingCategoryModel::KDEApplicationLoggingCategoryModel(QObject *parent)
: QAbstractListModel{parent}
{
- mRoleNames.insert(DescriptionRole, "description");
- mRoleNames.insert(LoggingTypeRole, "loggingType");
+ // Expose QML roles in the user-role range to avoid collisions with Qt built-in roles.
+ mRoleNames.insert(qmlRole(DescriptionRole), "description");
+ mRoleNames.insert(qmlRole(LoggingTypeRole), "loggingType");
+ mRoleNames.insert(qmlRole(CategoryRole), "category");
+ mRoleNames.insert(qmlRole(LoggingTypeStrRole), "loggingTypeStr");
}
KDEApplicationLoggingCategoryModel::~KDEApplicationLoggingCategoryModel() = default;
@@ -101,19 +112,31 @@ QVariant KDEApplicationLoggingCategoryModel::data(const QModelIndex &index, int
if (role == Qt::ToolTipRole) {
return category.generateToolTip();
}
- if (role != Qt::DisplayRole) {
+
+ // Keep widgets behavior (column-based access through DisplayRole).
+ if (role == Qt::DisplayRole) {
+ switch (static_cast<CategoryRoles>(index.column())) {
+ case DescriptionRole:
+ return category.description;
+ case LoggingTypeStrRole:
+ return KDebugSettingsUtil::convertCategoryTypeToString(category.loggingType);
+ case LoggingTypeRole:
+ return category.loggingType;
+ case CategoryRole:
+ return QVariant::fromValue(category);
+ }
return {};
}
- switch (static_cast<CategoryRoles>(index.column())) {
- case DescriptionRole: {
+ // QML asks data by role id; use dedicated user-role values.
+ switch (role) {
+ case qmlRole(DescriptionRole):
return category.description;
- }
- case LoggingTypeStrRole:
+ case qmlRole(LoggingTypeStrRole):
return KDebugSettingsUtil::convertCategoryTypeToString(category.loggingType);
- case LoggingTypeRole:
+ case qmlRole(LoggingTypeRole):
return category.loggingType;
- case CategoryRole:
+ case qmlRole(CategoryRole):
return QVariant::fromValue(category);
}
return {};
diff --git a/src/quickapps/contents/ui/KDEApplicationRulesPage.qml b/src/quickapps/contents/ui/KDEApplicationRulesPage.qml
index 99721f5b..224c59eb 100644
--- a/src/quickapps/contents/ui/KDEApplicationRulesPage.qml
+++ b/src/quickapps/contents/ui/KDEApplicationRulesPage.qml
@@ -56,7 +56,8 @@ Kirigami.ScrollablePage {
}
textRole: "display"
valueRole: "categoryType"
- currentIndex: LoggingManager.categoryTypeModel.indexOfCategory(listviewRules.model.categoryType)
+ // Re-evaluate once the ComboBox model is populated on startup.
+ currentIndex: count > 0 ? indexOfValue(loggingType) : -1
onActivated: () => {
listviewRules.model.setCategoryType(rowIndex, currentValue)
}