From cbb884f8a9951bae031df97876854bafd5c05bc0 Mon Sep 17 00:00:00 2001 From: Ivy233 Date: Sun, 4 Jan 2026 16:09:59 +0800 Subject: [PATCH 1/3] feat: add category-based skip list for cgroups grouping MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 新增 DConfig 配置项 cgroupsBasedGroupingSkipCategories 2. 默认跳过 TerminalEmulator 类别的应用,避免终端中启动的程序被错误识别 3. 实现 shouldSkipCgroupsByCategories() 函数,通过 DBus 查询应用类别 4. 在窗口匹配流程中集成类别检查逻辑 Log: 新增基于应用类别的 cgroups 分组跳过列表,解决终端中启动的图形程序被错误归类的问题 Influence: 1. 测试在 Alacritty 等终端模拟器中启动图形应用 2. 验证新启动的应用在任务栏显示独立图标 3. 检查 DConfig 配置项可正常读取和修改 4. 确认不影响非终端类应用的正常分组行为 5. 验证深度终端等原有白名单应用仍正常工作 PMS: TASK-384865 --- .../org.deepin.ds.dock.taskmanager.json | 11 +++++ panels/dock/taskmanager/globals.h | 1 + panels/dock/taskmanager/taskmanager.cpp | 46 ++++++++++++++++++- .../dock/taskmanager/taskmanagersettings.cpp | 6 +++ panels/dock/taskmanager/taskmanagersettings.h | 2 + 5 files changed, 64 insertions(+), 2 deletions(-) diff --git a/panels/dock/taskmanager/dconfig/org.deepin.ds.dock.taskmanager.json b/panels/dock/taskmanager/dconfig/org.deepin.ds.dock.taskmanager.json index cf7141f78..f94670831 100644 --- a/panels/dock/taskmanager/dconfig/org.deepin.ds.dock.taskmanager.json +++ b/panels/dock/taskmanager/dconfig/org.deepin.ds.dock.taskmanager.json @@ -55,6 +55,17 @@ "permissions": "readwrite", "visibility": "private" }, + "cgroupsBasedGroupingSkipCategories": { + "value": ["TerminalEmulator"], + "serial": 0, + "flags": [], + "name": "CGroups-Based Grouping Skipped Categories", + "name[zh_CN]": "基于 cgroups 的任务图标分组所应跳过的应用类别列表", + "description": "List of desktop file categories that cgroups-based grouping should skip checking", + "description[zh_CN]": "一个表示基于 CGroups 的应用分组所应当跳过的应用类别列表", + "permissions": "readwrite", + "visibility": "private" + }, "Docked_Items": { "value": ["id: dde-file-manager,type: amAPP", "id: org.deepin.browser,type: amAPP", "id: deepin-app-store,type: amAPP", "id: org.deepin.dde.control-center, type: amAPP", "id: deepin-music,type: amAPP", "id: deepin-editor,type: amAPP", "id: deepin-mail,type: amAPP","id: deepin-terminal,type: amAPP","id: dde-calendar,type: amAPP", "id: deepin-calculator,type: amAPP"], "serial": 0, diff --git a/panels/dock/taskmanager/globals.h b/panels/dock/taskmanager/globals.h index 32c57697d..240f17969 100644 --- a/panels/dock/taskmanager/globals.h +++ b/panels/dock/taskmanager/globals.h @@ -22,6 +22,7 @@ static inline const QString TASKMANAGER_ALLOWFOCEQUIT_KEY = "Allow_Force_Quit"; static inline const QString TASKMANAGER_WINDOWSPLIT_KEY = "noTaskGrouping"; static inline const QString TASKMANAGER_CGROUPS_BASED_GROUPING_KEY = "cgroupsBasedGrouping"; static inline const QString TASKMANAGER_CGROUPS_BASED_GROUPING_SKIP_APPIDS = "cgroupsBasedGroupingSkipAppIds"; +static inline const QString TASKMANAGER_CGROUPS_BASED_GROUPING_SKIP_CATEGORIES = "cgroupsBasedGroupingSkipCategories"; static inline const QString TASKMANAGER_DOCKEDITEMS_KEY = "Docked_Items"; constexpr auto TASKMANAGER_DOCKEDELEMENTS_KEY = "dockedElements"; diff --git a/panels/dock/taskmanager/taskmanager.cpp b/panels/dock/taskmanager/taskmanager.cpp index cc1b2d969..33fab0a9f 100644 --- a/panels/dock/taskmanager/taskmanager.cpp +++ b/panels/dock/taskmanager/taskmanager.cpp @@ -31,6 +31,7 @@ #include #include +#include "applicationinterface.h" #ifdef BUILD_WITH_X11 #include "x11windowmonitor.h" @@ -63,10 +64,49 @@ static QString getDesktopIdByPid(const QStringList &identifies) qCDebug(taskManagerLog) << "appId is empty, AM failed to identify window with pid:" << windowPid; return {}; } - + return QString::fromUtf8(appId); } +// 检查应用的 Categories 是否在跳过列表中 +static bool shouldSkipCgroupsByCategories(const QString &desktopId) +{ + auto skipCategories = Settings->cgroupsBasedGroupingSkipCategories(); + if (skipCategories.isEmpty() || desktopId.isEmpty()) { + return false; + } + + // 构造 DBus 路径 + QString dbusPath = QStringLiteral("/org/desktopspec/ApplicationManager1/") + escapeToObjectPath(desktopId); + + // 创建 Application 接口 + Application appInterface(QStringLiteral("org.desktopspec.ApplicationManager1"), + dbusPath, + QDBusConnection::sessionBus()); + + if (!appInterface.isValid()) { + qCDebug(taskManagerLog) << "Failed to create Application interface for:" << desktopId; + return false; + } + + // 获取应用的 Categories + QStringList categories = appInterface.categories(); + if (categories.isEmpty()) { + return false; + } + + // 检查是否有任何 category 在跳过列表中 + for (const QString &category : categories) { + if (skipCategories.contains(category)) { + qCDebug(taskManagerLog) << "Skipping cgroups grouping for" << desktopId + << "due to category:" << category; + return true; + } + } + + return false; +} + class BoolFilterModel : public QSortFilterProxyModel, public AbstractTaskManagerInterface { Q_OBJECT @@ -159,7 +199,9 @@ bool TaskManager::init() // 尝试通过AM(Application Manager)匹配应用程序 if (Settings->cgroupsBasedGrouping()) { auto desktopId = getDesktopIdByPid(identifies); - if (!desktopId.isEmpty() && !Settings->cgroupsBasedGroupingSkipIds().contains(desktopId)) { + if (!desktopId.isEmpty() && + !Settings->cgroupsBasedGroupingSkipIds().contains(desktopId) && + !shouldSkipCgroupsByCategories(desktopId)) { auto res = model->match(model->index(0, 0), roleNames.key(MODEL_DESKTOPID), desktopId, 1, Qt::MatchFixedString | Qt::MatchWrap).value(0); if (res.isValid()) { qCDebug(taskManagerLog) << "matched by AM desktop ID:" << desktopId << res; diff --git a/panels/dock/taskmanager/taskmanagersettings.cpp b/panels/dock/taskmanager/taskmanagersettings.cpp index 02e03f659..0bed074ba 100644 --- a/panels/dock/taskmanager/taskmanagersettings.cpp +++ b/panels/dock/taskmanager/taskmanagersettings.cpp @@ -54,6 +54,7 @@ TaskManagerSettings::TaskManagerSettings(QObject *parent) m_cgroupsBasedGrouping = m_taskManagerDconfig->value(TASKMANAGER_CGROUPS_BASED_GROUPING_KEY, true).toBool(); m_dockedElements = m_taskManagerDconfig->value(TASKMANAGER_DOCKEDELEMENTS_KEY, {}).toStringList(); m_cgroupsBasedGroupingSkipAppIds = m_taskManagerDconfig->value(TASKMANAGER_CGROUPS_BASED_GROUPING_SKIP_APPIDS, {"deepin-terminal"}).toStringList(); + m_cgroupsBasedGroupingSkipCategories = m_taskManagerDconfig->value(TASKMANAGER_CGROUPS_BASED_GROUPING_SKIP_CATEGORIES, {"TerminalEmulator"}).toStringList(); migrateFromDockedItems(); } @@ -89,6 +90,11 @@ QStringList TaskManagerSettings::cgroupsBasedGroupingSkipIds() const return m_cgroupsBasedGroupingSkipAppIds; } +QStringList TaskManagerSettings::cgroupsBasedGroupingSkipCategories() const +{ + return m_cgroupsBasedGroupingSkipCategories; +} + QStringList TaskManagerSettings::dockedElements() const { return m_dockedElements; diff --git a/panels/dock/taskmanager/taskmanagersettings.h b/panels/dock/taskmanager/taskmanagersettings.h index 03459b503..aeb369e22 100644 --- a/panels/dock/taskmanager/taskmanagersettings.h +++ b/panels/dock/taskmanager/taskmanagersettings.h @@ -31,6 +31,7 @@ class TaskManagerSettings : public QObject bool cgroupsBasedGrouping() const; QStringList cgroupsBasedGroupingSkipIds() const; + QStringList cgroupsBasedGroupingSkipCategories() const; void setDockedElements(const QStringList &elements); void toggleDockedElement(const QString &element); @@ -58,5 +59,6 @@ class TaskManagerSettings : public QObject bool m_cgroupsBasedGrouping; QStringList m_dockedElements; QStringList m_cgroupsBasedGroupingSkipAppIds; + QStringList m_cgroupsBasedGroupingSkipCategories; }; } From cdfcefddd3311ca7644ff74ba53a51cf39887cc6 Mon Sep 17 00:00:00 2001 From: Ivy233 Date: Tue, 6 Jan 2026 20:20:48 +0800 Subject: [PATCH 2/3] refactor: optimize cgroups skip categories implementation using parser factory MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 使用 DesktopFileParserFactory 替代直接 DBus 调用 2. 在 DesktopfileAbstractParser 中添加 categories() 虚方法 3. 在 DesktopFileAMParser 中实现 categories() 方法 4. 利用工厂的对象缓存机制,提升性能 5. 移除直接的 Application DBus 接口创建代码 Log: 重构基于类别的 cgroups 跳过实现,使用 Parser 工厂模式替代直接 DBus 调用,提升代码复用性和性能 Influence: 1. 功能保持不变,仍然正确识别终端模拟器类应用 2. 利用 Parser 对象缓存,减少重复创建开销 3. 代码架构更统一,与现有 Parser 体系集成 4. 验证在 Alacritty 等终端中启动的应用仍显示独立图标 5. 确认性能优化不影响功能正确性 PMS: TASK-384865 --- .../taskmanager/desktopfileabstractparser.cpp | 5 +++++ .../dock/taskmanager/desktopfileabstractparser.h | 1 + panels/dock/taskmanager/desktopfileamparser.cpp | 11 +++++++++++ panels/dock/taskmanager/desktopfileamparser.h | 1 + panels/dock/taskmanager/taskmanager.cpp | 16 ++++------------ 5 files changed, 22 insertions(+), 12 deletions(-) diff --git a/panels/dock/taskmanager/desktopfileabstractparser.cpp b/panels/dock/taskmanager/desktopfileabstractparser.cpp index 5e34eb3d6..c05b3679d 100644 --- a/panels/dock/taskmanager/desktopfileabstractparser.cpp +++ b/panels/dock/taskmanager/desktopfileabstractparser.cpp @@ -77,6 +77,11 @@ QString DesktopfileAbstractParser::genericName() return ""; } +QStringList DesktopfileAbstractParser::categories() +{ + return QStringList(); +} + QString DesktopfileAbstractParser::identifyWindow(QPointer window) { QString res = QStringLiteral("asbtractAPP:://"); diff --git a/panels/dock/taskmanager/desktopfileabstractparser.h b/panels/dock/taskmanager/desktopfileabstractparser.h index df2ce5960..7dc02a285 100644 --- a/panels/dock/taskmanager/desktopfileabstractparser.h +++ b/panels/dock/taskmanager/desktopfileabstractparser.h @@ -39,6 +39,7 @@ class DesktopfileAbstractParser : public QObject virtual QString genericName(); virtual QString desktopIcon(); virtual QString xDeepinVendor(); + virtual QStringList categories(); virtual std::pair isValied(); diff --git a/panels/dock/taskmanager/desktopfileamparser.cpp b/panels/dock/taskmanager/desktopfileamparser.cpp index 4e480e8c1..22754dd35 100644 --- a/panels/dock/taskmanager/desktopfileamparser.cpp +++ b/panels/dock/taskmanager/desktopfileamparser.cpp @@ -122,6 +122,17 @@ QString DesktopFileAMParser::genericName() return m_genericName; } +QStringList DesktopFileAMParser::categories() +{ + if (!m_amIsAvaliable) return DesktopfileAbstractParser::categories(); + + if (m_applicationInterface) { + return m_applicationInterface->categories(); + } + + return QStringList(); +} + std::pair DesktopFileAMParser::isValied() { // TODO: 1. am service may be unavailable and get dbus timeout diff --git a/panels/dock/taskmanager/desktopfileamparser.h b/panels/dock/taskmanager/desktopfileamparser.h index 6712ee343..ea2e2f8be 100644 --- a/panels/dock/taskmanager/desktopfileamparser.h +++ b/panels/dock/taskmanager/desktopfileamparser.h @@ -32,6 +32,7 @@ class DesktopFileAMParser : public DesktopfileAbstractParser virtual QList> actions() override; virtual QString genericName() override; virtual QString type() override; + virtual QStringList categories() override; virtual std::pair isValied() override; diff --git a/panels/dock/taskmanager/taskmanager.cpp b/panels/dock/taskmanager/taskmanager.cpp index 33fab0a9f..62d7059af 100644 --- a/panels/dock/taskmanager/taskmanager.cpp +++ b/panels/dock/taskmanager/taskmanager.cpp @@ -31,7 +31,6 @@ #include #include -#include "applicationinterface.h" #ifdef BUILD_WITH_X11 #include "x11windowmonitor.h" @@ -76,21 +75,14 @@ static bool shouldSkipCgroupsByCategories(const QString &desktopId) return false; } - // 构造 DBus 路径 - QString dbusPath = QStringLiteral("/org/desktopspec/ApplicationManager1/") + escapeToObjectPath(desktopId); - - // 创建 Application 接口 - Application appInterface(QStringLiteral("org.desktopspec.ApplicationManager1"), - dbusPath, - QDBusConnection::sessionBus()); - - if (!appInterface.isValid()) { - qCDebug(taskManagerLog) << "Failed to create Application interface for:" << desktopId; + // 创建一个临时的 parser 来获取 categories + auto parser = DESKTOPFILEFACTORY::createById(desktopId, "amAPP"); + if (!parser || parser.isNull()) { return false; } // 获取应用的 Categories - QStringList categories = appInterface.categories(); + QStringList categories = parser->categories(); if (categories.isEmpty()) { return false; } From 3b87e6d4907c92b482fe29deb1870b1fc00f5267 Mon Sep 17 00:00:00 2001 From: Ivy233 Date: Tue, 6 Jan 2026 23:40:33 +0800 Subject: [PATCH 3/3] feat: add categories support for cgroups skip list MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 在 dde-apps 的 AppItem 中添加 categories 属性 2. 在 AppItemModel 中添加 CategoriesRole 3. 在 AMAppItem 构造函数中保存从 AM 获取的 categories 4. 修改 shouldSkipCgroupsByCategories() 函数,从 dde-apps 读取 categories 5. 移除对即将废弃的 DESKTOPFILEFACTORY 的依赖 6. 回退 desktopfileabstractparser 和 desktopfileamparser 中的 categories 方法 Log: 实现基于应用类别的 cgroups 分组跳过功能,默认跳过 TerminalEmulator 类别应用 Influence: 1. 测试在终端模拟器中启动图形应用,验证应用显示为独立图标 2. 验证 categories 从 dde-apps 缓存读取,无额外 DBus 调用 3. 确认不影响非终端类应用的正常分组行为 4. 验证 DConfig 配置项可正常读取和修改 PMS: TASK-384865 --- applets/dde-apps/amappitem.cpp | 1 + applets/dde-apps/appitem.cpp | 10 ++++++++++ applets/dde-apps/appitem.h | 3 +++ applets/dde-apps/appitemmodel.cpp | 1 + applets/dde-apps/appitemmodel.h | 1 + .../taskmanager/desktopfileabstractparser.cpp | 5 ----- .../taskmanager/desktopfileabstractparser.h | 1 - .../dock/taskmanager/desktopfileamparser.cpp | 11 ----------- panels/dock/taskmanager/desktopfileamparser.h | 1 - panels/dock/taskmanager/taskmanager.cpp | 18 ++++++++++-------- panels/dock/taskmanager/taskmanager.h | 1 + 11 files changed, 27 insertions(+), 26 deletions(-) diff --git a/applets/dde-apps/amappitem.cpp b/applets/dde-apps/amappitem.cpp index 6cf3261a9..550b3d98c 100644 --- a/applets/dde-apps/amappitem.cpp +++ b/applets/dde-apps/amappitem.cpp @@ -49,6 +49,7 @@ AMAppItem::AMAppItem(const QDBusObjectPath &path, const ObjectInterfaceMap &sour auto categories = appInfo.value(u8"Categories").toStringList(); AppItem::setDDECategories(AppItemModel::DDECategories(CategoryUtils::parseBestMatchedCategory(categories))); + AppItem::setCategories(categories); auto lastLaunchedTime = appInfo.value(u8"LastLaunchedTime").toULongLong(); AppItem::setLastLaunchedTime(lastLaunchedTime); diff --git a/applets/dde-apps/appitem.cpp b/applets/dde-apps/appitem.cpp index bb7577833..5e9843b3b 100644 --- a/applets/dde-apps/appitem.cpp +++ b/applets/dde-apps/appitem.cpp @@ -99,6 +99,16 @@ void AppItem::setDDECategories(const AppItemModel::DDECategories &categories) return setData(categories, AppItemModel::DDECategoryRole); } +QStringList AppItem::categories() const +{ + return data(AppItemModel::CategoriesRole).toStringList(); +} + +void AppItem::setCategories(const QStringList &categories) +{ + return setData(categories, AppItemModel::CategoriesRole); +} + QString AppItem::actions() const { return data(AppItemModel::ActionsRole).toString(); diff --git a/applets/dde-apps/appitem.h b/applets/dde-apps/appitem.h index f67926a61..0dad6edf1 100644 --- a/applets/dde-apps/appitem.h +++ b/applets/dde-apps/appitem.h @@ -39,6 +39,9 @@ class AppItem : public QStandardItem AppItemModel::DDECategories ddeCategories() const; void setDDECategories(const AppItemModel::DDECategories &categories); + QStringList categories() const; + void setCategories(const QStringList &categories); + QString actions() const; void setActions(const QString &actions); diff --git a/applets/dde-apps/appitemmodel.cpp b/applets/dde-apps/appitemmodel.cpp index aa4db5811..6f9ab9534 100644 --- a/applets/dde-apps/appitemmodel.cpp +++ b/applets/dde-apps/appitemmodel.cpp @@ -20,6 +20,7 @@ QHash AppItemModel::roleNames() const {AppItemModel::NoDisplayRole, QByteArrayLiteral("noDisplay")}, {AppItemModel::ActionsRole, QByteArrayLiteral("actions")}, {AppItemModel::DDECategoryRole, QByteArrayLiteral("ddeCategory")}, + {AppItemModel::CategoriesRole, QByteArrayLiteral("categories")}, {AppItemModel::InstalledTimeRole, QByteArrayLiteral("installedTime")}, {AppItemModel::LastLaunchedTimeRole, QByteArrayLiteral("lastLaunchedTime")}, {AppItemModel::LaunchedTimesRole, QByteArrayLiteral("launchedTimes")}, diff --git a/applets/dde-apps/appitemmodel.h b/applets/dde-apps/appitemmodel.h index 3626e55bf..4b75314c1 100644 --- a/applets/dde-apps/appitemmodel.h +++ b/applets/dde-apps/appitemmodel.h @@ -19,6 +19,7 @@ class AppItemModel : public QStandardItemModel NoDisplayRole, ActionsRole, DDECategoryRole, + CategoriesRole, InstalledTimeRole, LastLaunchedTimeRole, LaunchedTimesRole, diff --git a/panels/dock/taskmanager/desktopfileabstractparser.cpp b/panels/dock/taskmanager/desktopfileabstractparser.cpp index c05b3679d..5e34eb3d6 100644 --- a/panels/dock/taskmanager/desktopfileabstractparser.cpp +++ b/panels/dock/taskmanager/desktopfileabstractparser.cpp @@ -77,11 +77,6 @@ QString DesktopfileAbstractParser::genericName() return ""; } -QStringList DesktopfileAbstractParser::categories() -{ - return QStringList(); -} - QString DesktopfileAbstractParser::identifyWindow(QPointer window) { QString res = QStringLiteral("asbtractAPP:://"); diff --git a/panels/dock/taskmanager/desktopfileabstractparser.h b/panels/dock/taskmanager/desktopfileabstractparser.h index 7dc02a285..df2ce5960 100644 --- a/panels/dock/taskmanager/desktopfileabstractparser.h +++ b/panels/dock/taskmanager/desktopfileabstractparser.h @@ -39,7 +39,6 @@ class DesktopfileAbstractParser : public QObject virtual QString genericName(); virtual QString desktopIcon(); virtual QString xDeepinVendor(); - virtual QStringList categories(); virtual std::pair isValied(); diff --git a/panels/dock/taskmanager/desktopfileamparser.cpp b/panels/dock/taskmanager/desktopfileamparser.cpp index 22754dd35..4e480e8c1 100644 --- a/panels/dock/taskmanager/desktopfileamparser.cpp +++ b/panels/dock/taskmanager/desktopfileamparser.cpp @@ -122,17 +122,6 @@ QString DesktopFileAMParser::genericName() return m_genericName; } -QStringList DesktopFileAMParser::categories() -{ - if (!m_amIsAvaliable) return DesktopfileAbstractParser::categories(); - - if (m_applicationInterface) { - return m_applicationInterface->categories(); - } - - return QStringList(); -} - std::pair DesktopFileAMParser::isValied() { // TODO: 1. am service may be unavailable and get dbus timeout diff --git a/panels/dock/taskmanager/desktopfileamparser.h b/panels/dock/taskmanager/desktopfileamparser.h index ea2e2f8be..6712ee343 100644 --- a/panels/dock/taskmanager/desktopfileamparser.h +++ b/panels/dock/taskmanager/desktopfileamparser.h @@ -32,7 +32,6 @@ class DesktopFileAMParser : public DesktopfileAbstractParser virtual QList> actions() override; virtual QString genericName() override; virtual QString type() override; - virtual QStringList categories() override; virtual std::pair isValied() override; diff --git a/panels/dock/taskmanager/taskmanager.cpp b/panels/dock/taskmanager/taskmanager.cpp index 62d7059af..93148f380 100644 --- a/panels/dock/taskmanager/taskmanager.cpp +++ b/panels/dock/taskmanager/taskmanager.cpp @@ -68,21 +68,23 @@ static QString getDesktopIdByPid(const QStringList &identifies) } // 检查应用的 Categories 是否在跳过列表中 -static bool shouldSkipCgroupsByCategories(const QString &desktopId) +static bool shouldSkipCgroupsByCategories(const QString &desktopId, QAbstractItemModel *activeAppModel, const QHash &roleNames) { auto skipCategories = Settings->cgroupsBasedGroupingSkipCategories(); if (skipCategories.isEmpty() || desktopId.isEmpty()) { return false; } - // 创建一个临时的 parser 来获取 categories - auto parser = DESKTOPFILEFACTORY::createById(desktopId, "amAPP"); - if (!parser || parser.isNull()) { - return false; + QStringList categories; + + // 从 dde-apps 的 AppItem 读取 categories + if (activeAppModel) { + auto existingItem = activeAppModel->match(activeAppModel->index(0, 0), roleNames.key("desktopId"), desktopId, 1, Qt::MatchFixedString | Qt::MatchWrap).value(0); + if (existingItem.isValid()) { + categories = activeAppModel->data(existingItem, roleNames.key("categories")).toStringList(); + } } - // 获取应用的 Categories - QStringList categories = parser->categories(); if (categories.isEmpty()) { return false; } @@ -193,7 +195,7 @@ bool TaskManager::init() auto desktopId = getDesktopIdByPid(identifies); if (!desktopId.isEmpty() && !Settings->cgroupsBasedGroupingSkipIds().contains(desktopId) && - !shouldSkipCgroupsByCategories(desktopId)) { + !shouldSkipCgroupsByCategories(desktopId, model, roleNames)) { auto res = model->match(model->index(0, 0), roleNames.key(MODEL_DESKTOPID), desktopId, 1, Qt::MatchFixedString | Qt::MatchWrap).value(0); if (res.isValid()) { qCDebug(taskManagerLog) << "matched by AM desktop ID:" << desktopId << res; diff --git a/panels/dock/taskmanager/taskmanager.h b/panels/dock/taskmanager/taskmanager.h index d4cabf9c8..6c4a61ac8 100644 --- a/panels/dock/taskmanager/taskmanager.h +++ b/panels/dock/taskmanager/taskmanager.h @@ -51,6 +51,7 @@ class TaskManager : public DS_NAMESPACE::DContainment, public AbstractTaskManage NoDisplayRole, ActionsRole, DDECategoryRole, + CategoriesRole, InstalledTimeRole, LastLaunchedTimeRole, LaunchedTimesRole,