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
4 changes: 2 additions & 2 deletions panels/dock/tray/package/tray.qml
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ AppletItem {
preferredSection = "pinned"
}

surfacesData.push({"surfaceId": surfaceId, "delegateType": "legacy-tray-plugin", "sectionType": preferredSection, "forbiddenSections": forbiddenSections})
surfacesData.push({"surfaceId": surfaceId, "delegateType": "legacy-tray-plugin", "sectionType": preferredSection, "forbiddenSections": forbiddenSections, "isForceDock": item.pluginFlags & 0x1000})
}
// actually only for datetime plugin currently
for (let i = 0; i < DockCompositor.fixedPluginSurfaces.count; i++) {
Expand All @@ -151,7 +151,7 @@ AppletItem {
let forbiddenSections = ["stashed", "collapsable", "pinned"]
let preferredSection = "fixed"

surfacesData.push({"surfaceId": surfaceId, "delegateType": "legacy-tray-plugin", "sectionType": preferredSection, "forbiddenSections": forbiddenSections})
surfacesData.push({"surfaceId": surfaceId, "delegateType": "legacy-tray-plugin", "sectionType": preferredSection, "forbiddenSections": forbiddenSections, "isForceDock": item.pluginFlags & 0x1000})
}
DDT.TraySortOrderModel.availableSurfaces = surfacesData
console.log("onPluginSurfacesUpdated", surfacesData.length)
Expand Down
3 changes: 2 additions & 1 deletion panels/dock/tray/trayitem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,8 @@ DockItemInfos TrayItem::dockItemInfosFromModel(QAbstractItemModel *model)
const auto item = index.data(modelDataRole).value<QObject *>();
if (!item)
return DockItemInfos{};
if (!(item->property("pluginFlags").toInt() & Dock::Attribute_CanSetting)) {
int flags = item->property("pluginFlags").toInt();
if (!(flags & Dock::Attribute_CanSetting) || flags & Dock::Attribute_ForceDock) {
continue;
}
DockItemInfo itemInfo;
Expand Down
22 changes: 13 additions & 9 deletions panels/dock/tray/traysortordermodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ QStringList *TraySortOrderModel::getSection(const QString &sectionType)
return nullptr;
}

QString TraySortOrderModel::findSection(const QString & surfaceId, const QString & fallback, const QStringList & forbiddenSections)
QString TraySortOrderModel::findSection(const QString & surfaceId, const QString & fallback, const QStringList & forbiddenSections, bool isForceDock)
{
QStringList * found = nullptr;
QString result(fallback);
Expand All @@ -261,6 +261,7 @@ QString TraySortOrderModel::findSection(const QString & surfaceId, const QString

// 设置默认隐藏
if (!found && // 不在列表中
!isForceDock && // 非 forceDock
result != SECTION_FIXED && // 非固定位置插件(时间)
!surfaceId.startsWith("internal/") && // 非内置插件
!surfaceId.startsWith("application-tray::") // 非托盘图标
Expand Down Expand Up @@ -296,9 +297,10 @@ void TraySortOrderModel::registerToSection(const QString & surfaceId, const QStr
}

QStandardItem * TraySortOrderModel::createTrayItem(const QString & name, const QString & sectionType,
const QString & delegateType, const QStringList &forbiddenSections)
const QString & delegateType, const QStringList &forbiddenSections,
bool isForceDock)
{
QString actualSectionType = findSection(name, sectionType, forbiddenSections);
QString actualSectionType = findSection(name, sectionType, forbiddenSections, isForceDock);
registerToSection(name, actualSectionType);

qDebug() << actualSectionType << name << delegateType;
Expand All @@ -310,6 +312,7 @@ QStandardItem * TraySortOrderModel::createTrayItem(const QString & name, const Q
item->setData(delegateType, TraySortOrderModel::DelegateTypeRole);
item->setData(forbiddenSections, TraySortOrderModel::ForbiddenSectionsRole);
item->setData(-1, TraySortOrderModel::VisualIndexRole);
item->setData(isForceDock, TraySortOrderModel::IsForceDockRole);

return item;
}
Expand All @@ -330,7 +333,7 @@ void TraySortOrderModel::updateVisualIndexes()
QList<QStandardItem *> results = findItems(id);
if (results.isEmpty()) continue;
if (stashPlaceholder == results[0]) continue;
bool itemVisible = !m_hiddenIds.contains(id);
bool itemVisible = results[0]->data(TraySortOrderModel::IsForceDockRole).toBool() || !m_hiddenIds.contains(id);
results[0]->setData(SECTION_STASHED, TraySortOrderModel::SectionTypeRole);
results[0]->setData(itemVisible, TraySortOrderModel::VisibilityRole);
if (itemVisible) {
Expand All @@ -357,7 +360,7 @@ void TraySortOrderModel::updateVisualIndexes()
for (const QString & id : std::as_const(m_collapsableIds)) {
QList<QStandardItem *> results = findItems(id);
if (results.isEmpty()) continue;
bool itemVisible = !m_hiddenIds.contains(id);
bool itemVisible = results[0]->data(TraySortOrderModel::IsForceDockRole).toBool() || !m_hiddenIds.contains(id);
results[0]->setData(SECTION_COLLAPSABLE, TraySortOrderModel::SectionTypeRole);
results[0]->setData(itemVisible, TraySortOrderModel::VisibilityRole);
results[0]->setData(-1, TraySortOrderModel::VisualIndexRole);
Expand Down Expand Up @@ -385,7 +388,7 @@ void TraySortOrderModel::updateVisualIndexes()
for (const QString & id : std::as_const(m_pinnedIds)) {
QList<QStandardItem *> results = findItems(id);
if (results.isEmpty()) continue;
bool itemVisible = !m_hiddenIds.contains(id);
bool itemVisible = results[0]->data(TraySortOrderModel::IsForceDockRole).toBool() || !m_hiddenIds.contains(id);
results[0]->setData(SECTION_PINNED, TraySortOrderModel::SectionTypeRole);
results[0]->setData(itemVisible, TraySortOrderModel::VisibilityRole);
results[0]->setData(-1, TraySortOrderModel::VisualIndexRole);
Expand All @@ -408,7 +411,7 @@ void TraySortOrderModel::updateVisualIndexes()
for (const QString & id : std::as_const(m_fixedIds)) {
QList<QStandardItem *> results = findItems(id);
if (results.isEmpty()) continue;
bool itemVisible = !m_hiddenIds.contains(id);
bool itemVisible = results[0]->data(TraySortOrderModel::IsForceDockRole).toBool() || !m_hiddenIds.contains(id);
results[0]->setData(SECTION_FIXED, TraySortOrderModel::SectionTypeRole);
results[0]->setData(itemVisible, TraySortOrderModel::VisibilityRole);
results[0]->setData(-1, TraySortOrderModel::VisualIndexRole);
Expand All @@ -430,19 +433,20 @@ QString TraySortOrderModel::registerSurfaceId(const QVariantMap & surfaceData)
QString delegateType(surfaceData.value("delegateType", "legacy-tray-plugin").toString());
QString preferredSection(surfaceData.value("sectionType", "collapsable").toString());
QStringList forbiddenSections(surfaceData.value("forbiddenSections").toStringList());
bool isForceDock(surfaceData.value("isForceDock").toBool());

QList<QStandardItem *> results = findItems(surfaceId);
if (!results.isEmpty()) {
QStandardItem * result = results[0];
// check if the item is currently in a forbidden zone
QString currentSection(result->data(SectionTypeRole).toString());
if (forbiddenSections.contains(currentSection)) {
result->setData(findSection(surfaceId, preferredSection, forbiddenSections), SectionTypeRole);
result->setData(findSection(surfaceId, preferredSection, forbiddenSections, isForceDock), SectionTypeRole);
}
return surfaceId;
}

appendRow(createTrayItem(surfaceId, preferredSection, delegateType, forbiddenSections));
appendRow(createTrayItem(surfaceId, preferredSection, delegateType, forbiddenSections, isForceDock));
return surfaceId;
}

Expand Down
5 changes: 3 additions & 2 deletions panels/dock/tray/traysortordermodel.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ class TraySortOrderModel : public QStandardItemModel
DelegateTypeRole,
// this tray item cannot be drop (or moved in any form) to the given sections
ForbiddenSectionsRole,
IsForceDockRole,
ModelExtendedRole = 0x1000
};
Q_ENUM(Roles)
Expand Down Expand Up @@ -85,10 +86,10 @@ class TraySortOrderModel : public QStandardItemModel

QStandardItem * findItemByVisualIndex(int visualIndex, VisualSections visualSection) const;
QStringList * getSection(const QString & sectionType);
QString findSection(const QString & surfaceId, const QString & fallback, const QStringList & forbiddenSections = {});
QString findSection(const QString & surfaceId, const QString & fallback, const QStringList & forbiddenSections, bool isForceDock);
void registerToSection(const QString & surfaceId, const QString & sectionType);
QStandardItem * createTrayItem(const QString & name, const QString & sectionType,
const QString & delegateType, const QStringList & forbiddenSections = {});
const QString & delegateType, const QStringList & forbiddenSections = {}, bool isForceDock = false);
void updateVisualIndexes();
QString registerSurfaceId(const QVariantMap &surfaceData);
void loadDataFromDConfig();
Expand Down