fix: improve window grouping and drag reordering in dock#1478
fix: improve window grouping and drag reordering in dock#1478wjyrich wants to merge 1 commit intolinuxdeepin:masterfrom
Conversation
1. Fixed window grouping logic to correctly group windows by application after drag reordering 2. Enhanced window insertion algorithm to find the last window of an app even when windows are not consecutive 3. Added moveItem() method to properly handle item movement in the model 4. Connected windowSplitChanged signal to trigger re-grouping when window split mode changes 5. Updated QML drag handlers to use moveItem() when window split is enabled Log: Fixed dock task manager window grouping issues after drag reordering Influence: 1. Test dragging windows in dock when window split is disabled - windows should stay grouped by application 2. Test dragging windows in dock when window split is enabled - windows should move independently 3. Verify that window grouping is maintained after toggling window split mode 4. Test drag and drop reordering of both individual windows and application groups 5. Verify that the dock maintains correct ordering after multiple drag operations fix: 修复任务管理器停靠栏窗口分组和拖拽重排序问题 1. 修复窗口分组逻辑,确保拖拽重排序后窗口能正确按应用程序分组 2. 改进窗口插入算法,即使窗口不连续也能找到应用程序的最后一个窗口 3. 添加 moveItem() 方法以正确处理模型中的项目移动 4. 连接 windowSplitChanged 信号,在窗口分割模式更改时触发重新分组 5. 更新 QML 拖拽处理程序,在窗口分割启用时使用 moveItem() 方法 Log: 修复停靠栏任务管理器拖拽重排序后的窗口分组问题 Influence: 1. 测试在窗口分割禁用时拖拽停靠栏中的窗口 - 窗口应按应用程序保持分组 2. 测试在窗口分割启用时拖拽停靠栏中的窗口 - 窗口应独立移动 3. 验证切换窗口分割模式后窗口分组是否保持正确 4. 测试单个窗口和应用程序组的拖拽重排序功能 5. 验证多次拖拽操作后停靠栏是否保持正确的排序 PMS: BUG-343469
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: wjyrich The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
deepin pr auto review这段代码主要实现了任务栏中窗口项的拖拽移动、分组重排以及设置变更时的响应功能。整体逻辑是清晰的,但存在一些关于性能、模型操作规范性和代码健壮性的改进空间。以下是详细的审查意见: 1. 代码逻辑与功能改进点 1:
改进点 2:
2. 代码质量与规范改进点 3:
改进点 4:
3. 代码安全改进点 5:边界检查与空指针
4. QML 交互逻辑改进点 6:QML 中的重复代码
总结建议
优化后的 void DockGlobalElementModel::groupItemsByApp()
{
if (m_data.isEmpty() || TaskManagerSettings::instance()->isWindowSplit())
return;
// 1. 创建一个临时列表用于存储分组后的数据
QList<ItemType> newData;
QSet<QString> processedIds;
// 2. 遍历原始数据,按 ID 分组
for (const auto &item : m_data) {
const QString &id = std::get<0>(item);
if (processedIds.contains(id)) continue;
// 找到所有相同 ID 的项
for (const auto &innerItem : m_data) {
if (std::get<0>(innerItem) == id) {
newData.append(innerItem);
}
}
processedIds.insert(id);
}
// 3. 检查顺序是否真的改变了
if (m_data == newData) return;
// 4. 更新模型
beginResetModel();
m_data = newData;
endResetModel();
}注:使用 |
Log: Fixed dock task manager window grouping issues after drag reordering
Influence:
fix: 修复任务管理器停靠栏窗口分组和拖拽重排序问题
Log: 修复停靠栏任务管理器拖拽重排序后的窗口分组问题
Influence:
PMS: BUG-343469