Skip to content

Commit 802e7f6

Browse files
committed
feat: ability to fine-tune cgroups-based appid detection
增加选项以供对于 cgroup 的应用识别场景,跳过指定应用程序的检查. 由于用户从终端执行带图形界面的应用程序的概率较大(例如 gitk, deepin-dconfig-edtor 等),这些应用必然无法匹配到一个 desktop id, 导致在经过 AM 的应用识别时,会根据其 cgroup 匹配到父进程的应用 id 上. 若要保留基于 cgroup 的识别则此问题基本没有合理的解决方案. 此提交引入了一个新的 dconfig 配置项,允许指定一个列表,表示希望跳 过基于 cgroup 的应用识别与合并的 appid 列表. 当 fallback 到 cgroup 识别且 cgroup 在此列表中,则此应用不再根据 cgroup 提取到的 appid 进行分组. 这个列表的值是 appid, 即 desktop-id 去掉 .desktop 后缀后剩余的部分. 此列表一般应当是终端模拟器的应用 id, 也可以将专门用于启动其他程 序的第三方启动器/工具添加到此列表中.例如 uTools 或者文件管理器. 另外此提交也把原本允许彻底禁用基于 cgroups 识别与分组的选项的逻 辑添加了回来. 另注: 1. 对于希望在 deepin 环境尽可能保持"deepin原生"行为的组件,应当 接入 dde-application-manager 来通过它启动应用 2. 所有应用仍然应当尽可能被正确安装到系统中,以确保其存在对应的 desktop-id/appid. 上述新增的配置项也仅适用于被正确安装/有应 用id的应用程序 Log:
1 parent 99268a8 commit 802e7f6

File tree

5 files changed

+30
-8
lines changed

5 files changed

+30
-8
lines changed

panels/dock/taskmanager/dconfig/org.deepin.ds.dock.taskmanager.json

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,24 @@
3737
"value": true,
3838
"serial": 0,
3939
"flags": [],
40-
"name": "cgroupsBasedGrouping",
40+
"name": "CGroups-based Grouping",
4141
"name[zh_CN]": "基于 cgroups 的任务图标分组",
4242
"description": "Enable cgroups-based task grouping",
4343
"description[zh_CN]": "启用基于 cgroups 的任务图标分组",
4444
"permissions": "readonly",
4545
"visibility": "private"
4646
},
47+
"cgroupsBasedGroupingSkipAppIds": {
48+
"value": ["deepin-terminal"],
49+
"serial": 0,
50+
"flags": [],
51+
"name": "CGroups-Based Grouping Skipped App IDs",
52+
"name[zh_CN]": "基于 cgroups 的任务图标分组所应跳过的应用列表",
53+
"description": "List of app id that cgroups-based grouping should skip checking",
54+
"description[zh_CN]": "一个表示基于 CGroups 的应用分组所应当跳过的 App ID 列表",
55+
"permissions": "readwrite",
56+
"visibility": "private"
57+
},
4758
"Docked_Items": {
4859
"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"],
4960
"serial": 0,

panels/dock/taskmanager/globals.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ static inline const QString DOCK_ACTION_DOCK = "dock-action-dock";
2020
static inline const QString TASKMANAGER_ALLOWFOCEQUIT_KEY = "Allow_Force_Quit";
2121
static inline const QString TASKMANAGER_WINDOWSPLIT_KEY = "noTaskGrouping";
2222
static inline const QString TASKMANAGER_CGROUPS_BASED_GROUPING_KEY = "cgroupsBasedGrouping";
23+
static inline const QString TASKMANAGER_CGROUPS_BASED_GROUPING_SKIP_APPIDS = "cgroupsBasedGroupingSkipAppIds";
2324
static inline const QString TASKMANAGER_DOCKEDITEMS_KEY = "Docked_Items";
2425
constexpr auto TASKMANAGER_DOCKEDELEMENTS_KEY = "dockedElements";
2526

panels/dock/taskmanager/taskmanager.cpp

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -149,14 +149,16 @@ bool TaskManager::init()
149149
}
150150
}
151151
}
152-
152+
153153
// 尝试通过AM(Application Manager)匹配应用程序
154-
auto desktopId = getDesktopIdByPid(identifies);
155-
if (!desktopId.isEmpty()) {
156-
auto res = model->match(model->index(0, 0), roleNames.key(MODEL_DESKTOPID), desktopId, 1, Qt::MatchFixedString | Qt::MatchWrap).value(0);
157-
if (res.isValid()) {
158-
qCDebug(taskManagerLog) << "matched by AM desktop ID:" << desktopId << res;
159-
return res;
154+
if (Settings->cgroupsBasedGrouping()) {
155+
auto desktopId = getDesktopIdByPid(identifies);
156+
if (!desktopId.isEmpty() && !Settings->cgroupsBasedGroupingSkipIds().contains(desktopId)) {
157+
auto res = model->match(model->index(0, 0), roleNames.key(MODEL_DESKTOPID), desktopId, 1, Qt::MatchFixedString | Qt::MatchWrap).value(0);
158+
if (res.isValid()) {
159+
qCDebug(taskManagerLog) << "matched by AM desktop ID:" << desktopId << res;
160+
return res;
161+
}
160162
}
161163
}
162164

panels/dock/taskmanager/taskmanagersettings.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ TaskManagerSettings::TaskManagerSettings(QObject *parent)
5353
m_windowSplit = m_taskManagerDconfig->value(TASKMANAGER_WINDOWSPLIT_KEY).toBool();
5454
m_cgroupsBasedGrouping = m_taskManagerDconfig->value(TASKMANAGER_CGROUPS_BASED_GROUPING_KEY, true).toBool();
5555
m_dockedElements = m_taskManagerDconfig->value(TASKMANAGER_DOCKEDELEMENTS_KEY, {}).toStringList();
56+
m_cgroupsBasedGroupingSkipAppIds = m_taskManagerDconfig->value(TASKMANAGER_CGROUPS_BASED_GROUPING_SKIP_APPIDS, {"deepin-terminal"}).toStringList();
5657
migrateFromDockedItems();
5758
}
5859

@@ -83,6 +84,11 @@ bool TaskManagerSettings::cgroupsBasedGrouping() const
8384
return m_cgroupsBasedGrouping;
8485
}
8586

87+
QStringList TaskManagerSettings::cgroupsBasedGroupingSkipIds() const
88+
{
89+
return m_cgroupsBasedGroupingSkipAppIds;
90+
}
91+
8692
QStringList TaskManagerSettings::dockedElements() const
8793
{
8894
return m_dockedElements;

panels/dock/taskmanager/taskmanagersettings.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class TaskManagerSettings : public QObject
3030
void setWindowSplit(bool split);
3131

3232
bool cgroupsBasedGrouping() const;
33+
QStringList cgroupsBasedGroupingSkipIds() const;
3334

3435
void setDockedElements(const QStringList &elements);
3536
void toggleDockedElement(const QString &element);
@@ -56,5 +57,6 @@ class TaskManagerSettings : public QObject
5657
bool m_windowSplit;
5758
bool m_cgroupsBasedGrouping;
5859
QStringList m_dockedElements;
60+
QStringList m_cgroupsBasedGroupingSkipAppIds;
5961
};
6062
}

0 commit comments

Comments
 (0)