Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions panels/dock/dconfig/org.deepin.ds.dock.tray.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,17 @@
"permissions": "readwrite",
"visibility": "private"
},
"dockHiddenSurfaceIds": {
"value": [],
"serial": 0,
"flags": [],
"name": "Dock Hidden Surface IDs",
"name[zh_CN]": "在 Dock 中隐藏的标识 ID 列表",
"description": "Tray plugin surface IDs that should be hidden from dock tray but keep visible in other areas (e.g., control center)",
"description[zh_CN]": "在 Dock 托盘中隐藏但在其他区域(如控制中心)仍保持可见的标识 ID 列表",
"permissions": "readwrite",
"visibility": "private"
},
"isCollapsed": {
"value": false,
"serial": 0,
Expand Down
4 changes: 2 additions & 2 deletions panels/dock/tray/package/TrayItemPositioner.qml
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ Control {
if (DDT.TraySortOrderModel.isUpdating) {
return false
}
if (model.sectionType === "collapsable") return !collapsed && model.visibility
return model.sectionType !== "stashed" && model.visibility
if (model.sectionType === "collapsable") return !collapsed && model.visibility && model.dockVisible
return model.sectionType !== "stashed" && model.visibility && model.dockVisible
}
property size visualSize: Qt.size(0, 0)

Expand Down
43 changes: 38 additions & 5 deletions panels/dock/tray/traysortordermodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ TraySortOrderModel::TraySortOrderModel(QObject *parent)
defaultRoleNames.insert({
{TraySortOrderModel::SurfaceIdRole, QByteArrayLiteral("surfaceId")},
{TraySortOrderModel::VisibilityRole, QByteArrayLiteral("visibility")},
{TraySortOrderModel::DockVisibleRole, QByteArrayLiteral("dockVisible")},
{TraySortOrderModel::SectionTypeRole, QByteArrayLiteral("sectionType")},
{TraySortOrderModel::VisualIndexRole, QByteArrayLiteral("visualIndex")},
{TraySortOrderModel::DelegateTypeRole, QByteArrayLiteral("delegateType")},
Expand All @@ -44,7 +45,7 @@ TraySortOrderModel::TraySortOrderModel(QObject *parent)
appendRow(createTrayItem("internal/action-toggle-quick-settings", SECTION_TRAY_ACTION, "action-toggle-quick-settings"));

connect(m_dconfig.get(), &Dtk::Core::DConfig::valueChanged, this, [this](const QString &key){
if (key == QLatin1String("hiddenSurfaceIds")) {
if (key == QLatin1String("hiddenSurfaceIds") || key == QLatin1String("dockHiddenSurfaceIds")) {
loadDataFromDConfig();
updateVisualIndexes();
}
Expand Down Expand Up @@ -218,6 +219,26 @@ bool TraySortOrderModel::isDisplayedSurface(const QString &surfaceId) const
return !m_hiddenIds.contains(surfaceId);
}

void TraySortOrderModel::setDockVisible(const QString &surfaceId, bool visible)
{
if (visible) {
if (m_dockHiddenIds.contains(surfaceId)) {
m_dockHiddenIds.removeOne(surfaceId);
}
} else {
if (!m_dockHiddenIds.contains(surfaceId)) {
m_dockHiddenIds.append(surfaceId);
}
}
updateVisualIndexes();
saveDataToDConfig();
}

bool TraySortOrderModel::isDockVisible(const QString &surfaceId) const
{
return !m_dockHiddenIds.contains(surfaceId);
}

QStandardItem *TraySortOrderModel::findItemByVisualIndex(int visualIndex, VisualSections visualSection) const
{
QStandardItem * result = nullptr;
Expand Down Expand Up @@ -325,6 +346,7 @@ QStandardItem *TraySortOrderModel::createTrayItem(const QString &name,
QStandardItem * item = new QStandardItem(name);
item->setData(name, TraySortOrderModel::SurfaceIdRole);
item->setData(true, TraySortOrderModel::VisibilityRole);
item->setData(true, TraySortOrderModel::DockVisibleRole);
item->setData(actualSectionType, TraySortOrderModel::SectionTypeRole);
item->setData(delegateType, TraySortOrderModel::DelegateTypeRole);
item->setData(forbiddenSections, TraySortOrderModel::ForbiddenSectionsRole);
Expand Down Expand Up @@ -361,8 +383,11 @@ void TraySortOrderModel::updateVisualIndexes()
// forcedock and can not setting plugin need always set to visible
auto pluginFlags = results[0]->data(TraySortOrderModel::PluginFlagsRole).toInt();
bool itemVisible = (pluginFlags & Dock::Attribute_ForceDock) || !(pluginFlags & Dock::Attribute_ForceDock) || !m_hiddenIds.contains(id);
bool dockVisible = !m_dockHiddenIds.contains(id);
results[0]->setData(SECTION_STASHED, TraySortOrderModel::SectionTypeRole);
if (itemVisible) {
results[0]->setData(itemVisible, TraySortOrderModel::VisibilityRole);
results[0]->setData(dockVisible, TraySortOrderModel::DockVisibleRole);
if (itemVisible && dockVisible) {
showStashActionVisible = true;
results[0]->setData(stashedVisualIndex, TraySortOrderModel::VisualIndexRole);
stashedVisualIndex++;
Expand All @@ -389,9 +414,11 @@ void TraySortOrderModel::updateVisualIndexes()
if (results[0]->data(TraySortOrderModel::VisualIndexRole).toInt() != -1) continue;
auto pluginFlags = results[0]->data(TraySortOrderModel::PluginFlagsRole).toInt();
bool itemVisible = (pluginFlags & Dock::Attribute_ForceDock) || !(pluginFlags & Dock::Attribute_CanSetting) || !m_hiddenIds.contains(id);
bool dockVisible = !m_dockHiddenIds.contains(id);
results[0]->setData(SECTION_COLLAPSABLE, TraySortOrderModel::SectionTypeRole);
results[0]->setData(itemVisible, TraySortOrderModel::VisibilityRole);
if (itemVisible) {
results[0]->setData(dockVisible, TraySortOrderModel::DockVisibleRole);
if (itemVisible && dockVisible) {
toogleCollapseActionVisible = true;
if (!m_collapsed) {
results[0]->setData(currentVisualIndex++, TraySortOrderModel::VisualIndexRole);
Expand All @@ -418,9 +445,11 @@ void TraySortOrderModel::updateVisualIndexes()
if (results[0]->data(TraySortOrderModel::VisualIndexRole).toInt() != -1) continue;
auto flags = results[0]->data(TraySortOrderModel::PluginFlagsRole).toInt();
bool itemVisible = (flags & Dock::Attribute_ForceDock) || !(flags & Dock::Attribute_CanSetting) || !m_hiddenIds.contains(id);
bool dockVisible = !m_dockHiddenIds.contains(id);
results[0]->setData(SECTION_PINNED, TraySortOrderModel::SectionTypeRole);
results[0]->setData(itemVisible, TraySortOrderModel::VisibilityRole);
if (itemVisible) {
results[0]->setData(dockVisible, TraySortOrderModel::DockVisibleRole);
if (itemVisible && dockVisible) {
results[0]->setData(currentVisualIndex, TraySortOrderModel::VisualIndexRole);
currentVisualIndex++;
}
Expand All @@ -443,9 +472,11 @@ void TraySortOrderModel::updateVisualIndexes()
if (results[0]->data(TraySortOrderModel::VisualIndexRole).toInt() != -1) continue;
auto flags = results[0]->data(TraySortOrderModel::PluginFlagsRole).toInt();
bool itemVisible = (flags & Dock::Attribute_ForceDock) || !(flags & Dock::Attribute_CanSetting) || !m_hiddenIds.contains(id);
bool dockVisible = !m_dockHiddenIds.contains(id);
results[0]->setData(SECTION_FIXED, TraySortOrderModel::SectionTypeRole);
results[0]->setData(itemVisible, TraySortOrderModel::VisibilityRole);
if (itemVisible) {
results[0]->setData(dockVisible, TraySortOrderModel::DockVisibleRole);
if (itemVisible && dockVisible) {
results[0]->setData(currentVisualIndex, TraySortOrderModel::VisualIndexRole);
currentVisualIndex++;
}
Expand Down Expand Up @@ -489,6 +520,7 @@ void TraySortOrderModel::loadDataFromDConfig()
m_collapsableIds = m_dconfig->value("collapsableSurfaceIds").toStringList();
m_pinnedIds = m_dconfig->value("pinnedSurfaceIds").toStringList();
m_hiddenIds = m_dconfig->value("hiddenSurfaceIds").toStringList();
m_dockHiddenIds = m_dconfig->value("dockHiddenSurfaceIds").toStringList();
m_collapsed = m_dconfig->value("isCollapsed").toBool();
}

Expand All @@ -498,6 +530,7 @@ void TraySortOrderModel::saveDataToDConfig()
m_dconfig->setValue("collapsableSurfaceIds", m_collapsableIds);
m_dconfig->setValue("pinnedSurfaceIds", m_pinnedIds);
m_dconfig->setValue("hiddenSurfaceIds", m_hiddenIds);
m_dconfig->setValue("dockHiddenSurfaceIds", m_dockHiddenIds);
m_dconfig->setValue("isCollapsed", m_collapsed);
}

Expand Down
5 changes: 5 additions & 0 deletions panels/dock/tray/traysortordermodel.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ class TraySortOrderModel : public QStandardItemModel
enum Roles {
SurfaceIdRole = Qt::UserRole, // actually "pluginId::itemKey" or an internal one.
VisibilityRole,
DockVisibleRole,
SectionTypeRole,
VisualIndexRole,
DelegateTypeRole,
Expand All @@ -63,6 +64,8 @@ class TraySortOrderModel : public QStandardItemModel
Q_INVOKABLE bool dropToDockTray(const QString & draggedSurfaceId, int dropVisualIndex, bool isBefore);
Q_INVOKABLE void setSurfaceVisible(const QString & surfaceId, bool visible);
Q_INVOKABLE bool isDisplayedSurface(const QString &surfaceId) const;
Q_INVOKABLE void setDockVisible(const QString & surfaceId, bool visible);
Q_INVOKABLE bool isDockVisible(const QString &surfaceId) const;
Q_INVOKABLE QModelIndex getModelIndexByVisualIndex(int visualIndex) const;

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

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