Skip to content

Commit a3f715f

Browse files
committed
feat: add dock-specific tray item visibility control
1. Added new dconfig property "dockHiddenSurfaceIds" to store tray items that should be hidden in dock but remain visible in other areas like control center 2. Introduced DockVisibleRole to track separate visibility state for dock display 3. Modified TrayItemPositioner.qml to consider both visibility and dockVisible properties when positioning items 4. Updated tray item filtering logic to check dockVisible status in addition to existing visibility checks 5. Added setDockVisible and isDockVisible methods for controlling dock- specific visibility 6. Enhanced updateVisualIndexes method to handle both visibility states when calculating visual positions Log: Added ability to hide tray items from dock while keeping them visible in control center Influence: 1. Test tray items can be hidden from dock while remaining visible in control center 2. Verify dockHiddenSurfaceIds configuration is properly saved and loaded 3. Test visual positioning considers both visibility and dockVisible states 4. Verify tray items with Attribute_ForceDock flag are always visible in dock 5. Test collapsable, pinned, and fixed sections handle dock visibility correctly 6. Verify stash placeholder visibility logic works with new dockVisible property feat: 添加 Dock 特定托盘项可见性控制 1. 新增 dconfig 属性 "dockHiddenSurfaceIds" 用于存储在 Dock 中隐藏但在控 制中心等其他区域保持可见的托盘项 2. 引入 DockVisibleRole 来跟踪 Dock 显示的独立可见性状态 3. 修改 TrayItemPositioner.qml 在定位项目时同时考虑可见性和 dockVisible 属性 4. 更新托盘项过滤逻辑,在现有可见性检查基础上增加 dockVisible 状态检查 5. 添加 setDockVisible 和 isDockVisible 方法来控制 Dock 特定可见性 6. 增强 updateVisualIndexes 方法,在计算视觉位置时处理两种可见性状态 注: 加上此参数为了处理,在控制中心可以显示相应的插件项,保证在控制中心的任务栏插件列表可以驻留在任务栏的,但是即使控制中心可以控制保留驻留在任务栏,也可以通过此参数设置为不显示在任务栏。 Log: 新增在控制中心保持可见的同时从 Dock 隐藏托盘项的功能 Influence: 1. 测试托盘项可以从 Dock 隐藏同时在控制中心保持可见 2. 验证 dockHiddenSurfaceIds 配置是否正确保存和加载 3. 测试视觉定位同时考虑可见性和 dockVisible 状态 4. 验证带有 Attribute_ForceDock 标志的托盘项在 Dock 中始终可见 5. 测试可折叠、固定和固定部分正确处理 Dock 可见性 6. 验证隐藏占位符可见性逻辑与新的 dockVisible 属性正常工作 PMS: BUG-341141 BUG-341651
1 parent f601a66 commit a3f715f

File tree

4 files changed

+56
-7
lines changed

4 files changed

+56
-7
lines changed

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,17 @@
6767
"permissions": "readwrite",
6868
"visibility": "private"
6969
},
70+
"dockHiddenSurfaceIds": {
71+
"value": [],
72+
"serial": 0,
73+
"flags": [],
74+
"name": "Dock Hidden Surface IDs",
75+
"name[zh_CN]": "在 Dock 中隐藏的标识 ID 列表",
76+
"description": "Tray plugin surface IDs that should be hidden from dock tray but keep visible in other areas (e.g., control center)",
77+
"description[zh_CN]": "在 Dock 托盘中隐藏但在其他区域(如控制中心)仍保持可见的标识 ID 列表",
78+
"permissions": "readwrite",
79+
"visibility": "private"
80+
},
7081
"isCollapsed": {
7182
"value": false,
7283
"serial": 0,

panels/dock/tray/package/TrayItemPositioner.qml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ Control {
1212
if (DDT.TraySortOrderModel.isUpdating) {
1313
return false
1414
}
15-
if (model.sectionType === "collapsable") return !collapsed && model.visibility
16-
return model.sectionType !== "stashed" && model.visibility
15+
if (model.sectionType === "collapsable") return !collapsed && model.visibility && model.dockVisible
16+
return model.sectionType !== "stashed" && model.visibility && model.dockVisible
1717
}
1818
property size visualSize: Qt.size(0, 0)
1919

panels/dock/tray/traysortordermodel.cpp

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ TraySortOrderModel::TraySortOrderModel(QObject *parent)
2727
defaultRoleNames.insert({
2828
{TraySortOrderModel::SurfaceIdRole, QByteArrayLiteral("surfaceId")},
2929
{TraySortOrderModel::VisibilityRole, QByteArrayLiteral("visibility")},
30+
{TraySortOrderModel::DockVisibleRole, QByteArrayLiteral("dockVisible")},
3031
{TraySortOrderModel::SectionTypeRole, QByteArrayLiteral("sectionType")},
3132
{TraySortOrderModel::VisualIndexRole, QByteArrayLiteral("visualIndex")},
3233
{TraySortOrderModel::DelegateTypeRole, QByteArrayLiteral("delegateType")},
@@ -44,7 +45,7 @@ TraySortOrderModel::TraySortOrderModel(QObject *parent)
4445
appendRow(createTrayItem("internal/action-toggle-quick-settings", SECTION_TRAY_ACTION, "action-toggle-quick-settings"));
4546

4647
connect(m_dconfig.get(), &Dtk::Core::DConfig::valueChanged, this, [this](const QString &key){
47-
if (key == QLatin1String("hiddenSurfaceIds")) {
48+
if (key == QLatin1String("hiddenSurfaceIds") || key == QLatin1String("dockHiddenSurfaceIds")) {
4849
loadDataFromDConfig();
4950
updateVisualIndexes();
5051
}
@@ -218,6 +219,26 @@ bool TraySortOrderModel::isDisplayedSurface(const QString &surfaceId) const
218219
return !m_hiddenIds.contains(surfaceId);
219220
}
220221

222+
void TraySortOrderModel::setDockVisible(const QString &surfaceId, bool visible)
223+
{
224+
if (visible) {
225+
if (m_dockHiddenIds.contains(surfaceId)) {
226+
m_dockHiddenIds.removeOne(surfaceId);
227+
}
228+
} else {
229+
if (!m_dockHiddenIds.contains(surfaceId)) {
230+
m_dockHiddenIds.append(surfaceId);
231+
}
232+
}
233+
updateVisualIndexes();
234+
saveDataToDConfig();
235+
}
236+
237+
bool TraySortOrderModel::isDockVisible(const QString &surfaceId) const
238+
{
239+
return !m_dockHiddenIds.contains(surfaceId);
240+
}
241+
221242
QStandardItem *TraySortOrderModel::findItemByVisualIndex(int visualIndex, VisualSections visualSection) const
222243
{
223244
QStandardItem * result = nullptr;
@@ -325,6 +346,7 @@ QStandardItem *TraySortOrderModel::createTrayItem(const QString &name,
325346
QStandardItem * item = new QStandardItem(name);
326347
item->setData(name, TraySortOrderModel::SurfaceIdRole);
327348
item->setData(true, TraySortOrderModel::VisibilityRole);
349+
item->setData(true, TraySortOrderModel::DockVisibleRole);
328350
item->setData(actualSectionType, TraySortOrderModel::SectionTypeRole);
329351
item->setData(delegateType, TraySortOrderModel::DelegateTypeRole);
330352
item->setData(forbiddenSections, TraySortOrderModel::ForbiddenSectionsRole);
@@ -361,8 +383,11 @@ void TraySortOrderModel::updateVisualIndexes()
361383
// forcedock and can not setting plugin need always set to visible
362384
auto pluginFlags = results[0]->data(TraySortOrderModel::PluginFlagsRole).toInt();
363385
bool itemVisible = (pluginFlags & Dock::Attribute_ForceDock) || !(pluginFlags & Dock::Attribute_ForceDock) || !m_hiddenIds.contains(id);
386+
bool dockVisible = !m_dockHiddenIds.contains(id);
364387
results[0]->setData(SECTION_STASHED, TraySortOrderModel::SectionTypeRole);
365-
if (itemVisible) {
388+
results[0]->setData(itemVisible, TraySortOrderModel::VisibilityRole);
389+
results[0]->setData(dockVisible, TraySortOrderModel::DockVisibleRole);
390+
if (itemVisible && dockVisible) {
366391
showStashActionVisible = true;
367392
results[0]->setData(stashedVisualIndex, TraySortOrderModel::VisualIndexRole);
368393
stashedVisualIndex++;
@@ -389,9 +414,11 @@ void TraySortOrderModel::updateVisualIndexes()
389414
if (results[0]->data(TraySortOrderModel::VisualIndexRole).toInt() != -1) continue;
390415
auto pluginFlags = results[0]->data(TraySortOrderModel::PluginFlagsRole).toInt();
391416
bool itemVisible = (pluginFlags & Dock::Attribute_ForceDock) || !(pluginFlags & Dock::Attribute_CanSetting) || !m_hiddenIds.contains(id);
417+
bool dockVisible = !m_dockHiddenIds.contains(id);
392418
results[0]->setData(SECTION_COLLAPSABLE, TraySortOrderModel::SectionTypeRole);
393419
results[0]->setData(itemVisible, TraySortOrderModel::VisibilityRole);
394-
if (itemVisible) {
420+
results[0]->setData(dockVisible, TraySortOrderModel::DockVisibleRole);
421+
if (itemVisible && dockVisible) {
395422
toogleCollapseActionVisible = true;
396423
if (!m_collapsed) {
397424
results[0]->setData(currentVisualIndex++, TraySortOrderModel::VisualIndexRole);
@@ -418,9 +445,11 @@ void TraySortOrderModel::updateVisualIndexes()
418445
if (results[0]->data(TraySortOrderModel::VisualIndexRole).toInt() != -1) continue;
419446
auto flags = results[0]->data(TraySortOrderModel::PluginFlagsRole).toInt();
420447
bool itemVisible = (flags & Dock::Attribute_ForceDock) || !(flags & Dock::Attribute_CanSetting) || !m_hiddenIds.contains(id);
448+
bool dockVisible = !m_dockHiddenIds.contains(id);
421449
results[0]->setData(SECTION_PINNED, TraySortOrderModel::SectionTypeRole);
422450
results[0]->setData(itemVisible, TraySortOrderModel::VisibilityRole);
423-
if (itemVisible) {
451+
results[0]->setData(dockVisible, TraySortOrderModel::DockVisibleRole);
452+
if (itemVisible && dockVisible) {
424453
results[0]->setData(currentVisualIndex, TraySortOrderModel::VisualIndexRole);
425454
currentVisualIndex++;
426455
}
@@ -443,9 +472,11 @@ void TraySortOrderModel::updateVisualIndexes()
443472
if (results[0]->data(TraySortOrderModel::VisualIndexRole).toInt() != -1) continue;
444473
auto flags = results[0]->data(TraySortOrderModel::PluginFlagsRole).toInt();
445474
bool itemVisible = (flags & Dock::Attribute_ForceDock) || !(flags & Dock::Attribute_CanSetting) || !m_hiddenIds.contains(id);
475+
bool dockVisible = !m_dockHiddenIds.contains(id);
446476
results[0]->setData(SECTION_FIXED, TraySortOrderModel::SectionTypeRole);
447477
results[0]->setData(itemVisible, TraySortOrderModel::VisibilityRole);
448-
if (itemVisible) {
478+
results[0]->setData(dockVisible, TraySortOrderModel::DockVisibleRole);
479+
if (itemVisible && dockVisible) {
449480
results[0]->setData(currentVisualIndex, TraySortOrderModel::VisualIndexRole);
450481
currentVisualIndex++;
451482
}
@@ -489,6 +520,7 @@ void TraySortOrderModel::loadDataFromDConfig()
489520
m_collapsableIds = m_dconfig->value("collapsableSurfaceIds").toStringList();
490521
m_pinnedIds = m_dconfig->value("pinnedSurfaceIds").toStringList();
491522
m_hiddenIds = m_dconfig->value("hiddenSurfaceIds").toStringList();
523+
m_dockHiddenIds = m_dconfig->value("dockHiddenSurfaceIds").toStringList();
492524
m_collapsed = m_dconfig->value("isCollapsed").toBool();
493525
}
494526

@@ -498,6 +530,7 @@ void TraySortOrderModel::saveDataToDConfig()
498530
m_dconfig->setValue("collapsableSurfaceIds", m_collapsableIds);
499531
m_dconfig->setValue("pinnedSurfaceIds", m_pinnedIds);
500532
m_dconfig->setValue("hiddenSurfaceIds", m_hiddenIds);
533+
m_dconfig->setValue("dockHiddenSurfaceIds", m_dockHiddenIds);
501534
m_dconfig->setValue("isCollapsed", m_collapsed);
502535
}
503536

panels/dock/tray/traysortordermodel.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ class TraySortOrderModel : public QStandardItemModel
4040
enum Roles {
4141
SurfaceIdRole = Qt::UserRole, // actually "pluginId::itemKey" or an internal one.
4242
VisibilityRole,
43+
DockVisibleRole,
4344
SectionTypeRole,
4445
VisualIndexRole,
4546
DelegateTypeRole,
@@ -63,6 +64,8 @@ class TraySortOrderModel : public QStandardItemModel
6364
Q_INVOKABLE bool dropToDockTray(const QString & draggedSurfaceId, int dropVisualIndex, bool isBefore);
6465
Q_INVOKABLE void setSurfaceVisible(const QString & surfaceId, bool visible);
6566
Q_INVOKABLE bool isDisplayedSurface(const QString &surfaceId) const;
67+
Q_INVOKABLE void setDockVisible(const QString & surfaceId, bool visible);
68+
Q_INVOKABLE bool isDockVisible(const QString &surfaceId) const;
6669
Q_INVOKABLE QModelIndex getModelIndexByVisualIndex(int visualIndex) const;
6770

6871
signals:
@@ -89,6 +92,8 @@ class TraySortOrderModel : public QStandardItemModel
8992
QStringList m_fixedIds;
9093
// surface IDs that should be invisible/hidden from the tray area.
9194
QStringList m_hiddenIds;
95+
// surface IDs that should be hidden from dock tray but keep VisibilityRole true.
96+
QStringList m_dockHiddenIds;
9297

9398
QStandardItem * findItemByVisualIndex(int visualIndex, VisualSections visualSection) const;
9499
QStringList * getSection(const QString & sectionType);

0 commit comments

Comments
 (0)