Conversation
1. Filter window overlap by current workspace in isWindowOverlap() 2. Always re-evaluate overlap on workspace switch without reentry guard 3. Emit isWindowOverlapChanged when window workspace changes Log: Smart-hide now respects per-workspace window overlap state Influence: 1. Test smart-hide with window overlap in workspace 1, switch to workspace 2 2. Test smart-hide with windows spanning all workspaces 3. Test window moved between workspaces updates dock hide state fix: 隔离智能隐藏状态按工作区独立 1. isWindowOverlap() 中按当前工作区过滤窗口重叠 2. 切换工作区后始终重新评估重叠,移除重入守卫 3. 窗口跨工作区移动时补充 emit isWindowOverlapChanged Log: 智能隐藏现在按工作区独立维护窗口重叠状态 Influence: 1. 测试工作区一窗口重叠隐藏后切换到工作区二的显示状态 2. 测试跨所有工作区的窗口对智能隐藏的影响 3. 测试窗口在工作区间移动后任务栏隐藏状态更新 PMS: BUG-378341
|
[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 |
Reviewer's guide (collapsed on small PRs)Reviewer's GuideThe X11 dock helper now isolates smart-hide overlap state by workspace: overlap checks only consider windows in the active workspace or all workspaces, and state changes are emitted whenever the active workspace or a tracked window’s workspace assignment changes. Sequence diagram for workspace-aware dock smart-hide updatessequenceDiagram
participant Workspace as X11Workspace
participant Dock as X11DockHelper
participant Window as TrackedWindow
participant DockState as SmartHideState
Workspace->>Dock: currentWorkspaceChanged()
Dock->>Dock: getCurrentWorkspace()
Dock->>Dock: isWindowOverlap()
Dock->>DockState: isWindowOverlapChanged(overlap)
Window->>Dock: onWindowWorkspaceChanged(window)
Dock->>Dock: getWindowWorkspace(window)
Dock->>Dock: isWindowOverlap()
Dock->>DockState: isWindowOverlapChanged(overlap)
Flow diagram for workspace-filtered overlap detectionflowchart TD
A["isWindowOverlap()"] --> B["getCurrentWorkspace()"]
B --> C{Tracked window overlaps dock?}
C -- No --> E[Return false]
C -- Yes --> D{Window workspace is current or all workspaces?}
D -- Yes --> F[Return true]
D -- No --> C
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
deepin pr auto review🤖 AI 代码审查报告📊 总体评价
🔍 详细分析1. 语法逻辑 ✅评价: 优秀 ✅ 通过 潜在问题: 建议: 代码逻辑正确,isWindowOverlap()正确过滤当前工作区窗口,currentWorkspaceChanged处理器简化合理,onWindowWorkspaceChanged补充信号发射逻辑完整。移除重入守卫安全,因为isWindowOverlap()为只读操作不会触发重入。 2. 代码质量 ✅评价: 优秀 ✅ 通过 潜在问题: 建议: 注释拼写错误已修复(widnow->window),注释内容已更新以反映新行为。代码从14行简化为1行,显著降低复杂度。工作区过滤逻辑统一收敛到isWindowOverlap()中,符合DRY原则。原lambda中无意义的return overlap |= window->overlap被替换为清晰的if语句。 3. 代码性能 ✅评价: 优秀 ✅ 通过 潜在问题:
建议: 建议将std::for_each替换为std::any_of,在找到首个重叠窗口时立即返回true,避免不必要的遍历。对于窗口数量较多的场景可提升性能。 4. 代码安全 🔒评价: 优秀 ✅ 通过
安全漏洞详情: 建议: 无安全风险,代码为桌面环境UI逻辑,不涉及用户输入、网络操作或文件IO。 💡 改进建议代码示例// 建议使用 std::any_of 替代 std::for_each,实现短路求值
bool X11DockHelper::isWindowOverlap()
{
if (m_showingDesktop) {
return false;
}
// any window overlap in current workspace
uint32_t currentWorkspace = m_xcbHelper->getCurrentWorkspace();
return std::any_of(m_windows.begin(), m_windows.end(),
[currentWorkspace](const auto &window) {
return window->overlap
&& (window->workspace == currentWorkspace
|| window->workspace == allWorkspace);
});
}本报告由 AI 代码审查工具自动生成 |
Changes
Fix smart-hide state not being isolated per workspace in X11 dock helper. When a window overlaps the dock in one workspace causing it to hide, switching to another workspace without overlapping windows would incorrectly keep the dock hidden.
Modifications (3 changes in
panels/dock/x11dockhelper.cpp)isWindowOverlap()— Filter by current workspace: only count windows whoseworkspacematches the current workspace orallWorkspace (0xffffffff).currentWorkspaceChangedhandler — Simplified to always emitisWindowOverlapChanged(isWindowOverlap())on workspace switch, removing thestatic bool updatingreentry guard and the "only emit when overlap exists" logic.onWindowWorkspaceChanged()— AddedQ_EMIT isWindowOverlapChanged(isWindowOverlap())after updatingdata->workspace, ensuring overlap state is re-evaluated when windows move between workspaces.Related
Summary by Sourcery
Bug Fixes: