[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)
                     }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.