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 e41932c00..cf7141f78 100644 --- a/panels/dock/taskmanager/dconfig/org.deepin.ds.dock.taskmanager.json +++ b/panels/dock/taskmanager/dconfig/org.deepin.ds.dock.taskmanager.json @@ -37,13 +37,24 @@ "value": true, "serial": 0, "flags": [], - "name": "cgroupsBasedGrouping", + "name": "CGroups-based Grouping", "name[zh_CN]": "基于 cgroups 的任务图标分组", "description": "Enable cgroups-based task grouping", "description[zh_CN]": "启用基于 cgroups 的任务图标分组", "permissions": "readonly", "visibility": "private" }, + "cgroupsBasedGroupingSkipAppIds": { + "value": ["deepin-terminal"], + "serial": 0, + "flags": [], + "name": "CGroups-Based Grouping Skipped App IDs", + "name[zh_CN]": "基于 cgroups 的任务图标分组所应跳过的应用列表", + "description": "List of app id that cgroups-based grouping should skip checking", + "description[zh_CN]": "一个表示基于 CGroups 的应用分组所应当跳过的 App ID 列表", + "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 fedf61844..d47f6d4f7 100644 --- a/panels/dock/taskmanager/globals.h +++ b/panels/dock/taskmanager/globals.h @@ -20,6 +20,7 @@ static inline const QString DOCK_ACTION_DOCK = "dock-action-dock"; 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_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 431ce4132..8b2e07778 100644 --- a/panels/dock/taskmanager/taskmanager.cpp +++ b/panels/dock/taskmanager/taskmanager.cpp @@ -149,14 +149,16 @@ bool TaskManager::init() } } } - + // 尝试通过AM(Application Manager)匹配应用程序 - auto desktopId = getDesktopIdByPid(identifies); - if (!desktopId.isEmpty()) { - 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; - return res; + if (Settings->cgroupsBasedGrouping()) { + auto desktopId = getDesktopIdByPid(identifies); + if (!desktopId.isEmpty() && !Settings->cgroupsBasedGroupingSkipIds().contains(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; + return res; + } } } diff --git a/panels/dock/taskmanager/taskmanagersettings.cpp b/panels/dock/taskmanager/taskmanagersettings.cpp index 68a67bbf1..02e03f659 100644 --- a/panels/dock/taskmanager/taskmanagersettings.cpp +++ b/panels/dock/taskmanager/taskmanagersettings.cpp @@ -53,6 +53,7 @@ TaskManagerSettings::TaskManagerSettings(QObject *parent) m_windowSplit = m_taskManagerDconfig->value(TASKMANAGER_WINDOWSPLIT_KEY).toBool(); 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(); migrateFromDockedItems(); } @@ -83,6 +84,11 @@ bool TaskManagerSettings::cgroupsBasedGrouping() const return m_cgroupsBasedGrouping; } +QStringList TaskManagerSettings::cgroupsBasedGroupingSkipIds() const +{ + return m_cgroupsBasedGroupingSkipAppIds; +} + QStringList TaskManagerSettings::dockedElements() const { return m_dockedElements; diff --git a/panels/dock/taskmanager/taskmanagersettings.h b/panels/dock/taskmanager/taskmanagersettings.h index 7cdbb166c..03459b503 100644 --- a/panels/dock/taskmanager/taskmanagersettings.h +++ b/panels/dock/taskmanager/taskmanagersettings.h @@ -30,6 +30,7 @@ class TaskManagerSettings : public QObject void setWindowSplit(bool split); bool cgroupsBasedGrouping() const; + QStringList cgroupsBasedGroupingSkipIds() const; void setDockedElements(const QStringList &elements); void toggleDockedElement(const QString &element); @@ -56,5 +57,6 @@ class TaskManagerSettings : public QObject bool m_windowSplit; bool m_cgroupsBasedGrouping; QStringList m_dockedElements; + QStringList m_cgroupsBasedGroupingSkipAppIds; }; }