Files
StellarX-kaifa/开发记录/Fix/Fix-BUG-20260122-0001-Window-runEventLoop普通控件事件分发顺序修复.md

59 lines
2.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Fix-BUG-20260122-0001
> 适用场景:记录某个 BUG 的修复方案、影响评估、验证结果与落地信息。
## 关联信息
- Fix ID: Fix-BUG-20260122-0001
- 关联 BUG ID: BUG-20260122-0001
- 修复目标: 将 `Window::runEventLoop()` 中普通控件事件分发顺序由正序遍历改为逆序遍历,以保持 Z 序直觉。
- 状态:已完成
- 负责人: 未记录
- 分支 / 版本: master / v3.0.1
## 根因分析
- 根因: 之前版本修改 `Window::runEventLoop()` 时,将原本的逆序事件分发错误改成了正序遍历。
- 触发条件: 普通控件重叠时,事件落在多个控件的命中区域。
- 为什么之前没发现:[可选] 测试缺失,提交时未进行详细代码审查。
- 关键证据:[可选] PDF 历史记录说明该问题属于代码审查发现的遍历顺序错误。
## 修复方案
- 修复思路: 对 `controls` 使用逆序遍历,让绘制顺序更靠上的控件优先处理事件。
- 关键改动:
- 将 `for (auto& c : controls)` 调整为 `for (auto it = controls.rbegin(); it != controls.rend(); ++it)`。
- 涉及文件 / 类 / 函数:
- `Window.cpp`
- `Window::runEventLoop()`
- 影响的 API / 行为:[可选] 无对外 API 变化;重叠控件事件命中顺序修正。
- 关键约束 / 不变量:[可选] 普通控件事件分发应保持逆序遍历,避免下层控件抢事件。
- 回滚点 / 开关:[可选] 回退普通控件事件遍历顺序。
## 影响评估
- 影响范围: 普通控件点击、悬停、重叠控件事件命中。
- 兼容性影响:无(内部逻辑修改)
- 行为变化:有(重叠控件由上层优先处理事件)
- 性能影响:无明显影响。
- 回归风险: 控件重叠时的事件分发行为变化,需要确认符合绘制 Z 序。
## 验证结果
- 验证步骤:
1. 创建重叠普通控件。
2. 在重叠区域触发点击与悬停。
3. 确认上层控件优先收到事件。
- 验证结果: PDF 历史记录标记已修复;原记录未提供详细验证证据。
- 回归检查:[可选] 普通控件事件分发、重叠按钮点击、悬停状态变化。
- 验证证据:[可选] 无
## 落地信息
- Commit: b765e54eff28ebcd0bd99a81dec80b3ac0769337
- PR:[可选] git 推送
- 发布版本: v3.0.1
- 备注: PDF 原文合入分支写作 `mster`,本次按仓库语境整理为 `master`。