54 lines
2.0 KiB
Markdown
54 lines
2.0 KiB
Markdown
# BUG-20260122-0001
|
||
|
||
> 适用场景:记录问题本身,不展开完整修复方案。修复内容写入对应的 Fix 文档。
|
||
|
||
## 基本信息
|
||
|
||
- ID: BUG-20260122-0001
|
||
- 标题: Window::runEventLoop 普通控件事件分发顺序
|
||
- 状态:已修复
|
||
- 严重性:S3
|
||
- 优先级:P2
|
||
- 模块: Window
|
||
- 版本 / 分支: v3.0.0
|
||
- 环境: Windows 10/11 x64 + Visual Studio 2022(MSVC)Debug / Release
|
||
- 发现人: 用户
|
||
- 关联 Fix ID: Fix-BUG-20260122-0001
|
||
|
||
## 问题描述
|
||
|
||
- 现象: `Window::runEventLoop()` 对普通控件分发事件时采用正序遍历 `controls`,控件重叠时下层控件可能抢走点击 / 悬停事件,导致行为与绘制顺序不一致。
|
||
- 影响范围: 普通控件存在重叠时,事件命中顺序可能不符合 Z 序直觉。
|
||
- 期望结果: 上层控件优先接收事件,下层控件不应抢走事件。
|
||
- 实际结果: 正序遍历导致下层控件可能先处理事件。
|
||
|
||
## 复现信息
|
||
|
||
- 前置条件:[可选] Window 中存在相互重叠的普通控件。
|
||
- 复现步骤:
|
||
|
||
1. 创建存在重叠区域的普通控件。
|
||
2. 在重叠区域触发点击或悬停事件。
|
||
3. 观察是否由下层控件优先处理事件。
|
||
|
||
- 复现概率:必现(按 PDF 记录;实际复现未提供)
|
||
- 最小复现 Demo:[可选] 无
|
||
- 证据:PDF 历史记录指出该问题来自之前版本误将逆序分发改为正序分发。
|
||
|
||
## 初步分析
|
||
|
||
- 疑似位置: `Window::runEventLoop()`
|
||
- 触发条件: 普通控件重叠,且事件落在重叠区域。
|
||
- 相关线索:
|
||
- 普通控件绘制顺序与事件分发顺序应保持 Z 序一致。
|
||
- `Window::controls` 正序遍历会让较早加入的下层控件先处理事件。
|
||
- 最近相关改动:[可选] 某个版本中普通控件遍历顺序被错误修改。
|
||
|
||
## 跟踪信息
|
||
|
||
- 首次发现时间: 2026-01-22
|
||
- 最后更新时间: 2026-09-19(从 PDF 整理入库)
|
||
- 修复版本: v3.0.1
|
||
- 验证版本:[可选] v3.0.1
|
||
- 备注:[可选] 来源原始 ID 为 `BUG-20260122`;PDF 未包含 `-XXXX` 后缀,入库时补充序号。
|