3.5 KiB
3.5 KiB
BUG-20261006-0001
适用场景:记录问题本身,不展开完整修复方案。修复内容写入对应的 Fix 文档。
基本信息
- ID: BUG-20261006-0001
- 标题: 搜狗未发送 IME 组合生命周期消息时,候选框未按当前锚点预定位
- 状态:已验证
- 严重性:S3
- 优先级:P1
- 模块: 阶段 0C / IME 坐标探测 / IMM32
- 版本 / 分支:
master;发现基线为225bc35加开发中的 0C 探测实现,最终收口于43cf4ac - 环境: Windows 11
10.0.22000、EasyX25.9.10、DPI-unaware 虚拟化视图 96 DPI、搜狗拼音 - 发现人: 用户真实搜狗输入法人工探测
- 关联 Fix ID: Fix-BUG-20261006-0001
问题描述
- 现象: EasyX 探测窗口刚打开时,在 F1/F2 锚点直接输入
ceshi,搜狗候选框出现在窗口外的默认位置;首次提交后,候选框只在 F3 附近获得定位,之后切换 F1/F2/F3 仍可能沿用 F3 的旧位置。 - 影响范围: 阶段 0C-3 无法正确验证搜狗候选框定位;若生产输入系统只在
WM_IME_STARTCOMPOSITION/WM_IME_COMPOSITION中设置位置,会复现同类 stale-position 问题。 - 期望结果: F1/F2/F3 任一锚点被选中后,在下一次输入开始前就把组合窗口和候选窗口位置写入当前 HWND 的 IME context;IME 生命周期消息到达时再校准一次。
- 实际结果: 非组合态切换锚点只更新内部索引和画面,不调用
ImmSetCompositionWindow/ImmSetCandidateWindow。
复现信息
- 前置条件: 使用搜狗拼音运行
scripts/run-visual-probe.ps1 -Mode ime-position -ImeName Sogou。 - 复现步骤:
- 启动探测窗口并确认搜狗拼音处于活动状态。
- 按 F1,输入固定串
ceshi,观察候选框位于窗口外的默认位置。 - 按 Escape 取消,按 F2 重复,仍观察到默认位置。
- 在候选框中按 Space 提交一次,再切换锚点输入;候选框停留在 F3 附近。
- 关闭窗口,检查 manifest 与 raw event sequence。
- 复现概率:本次人工测试稳定复现
- 最小复现 Demo:
EasyX.VisualProbe.exe --mode ime-position --ime-name Sogou - 证据:
TestResults/VisualProbe/20261005-235150-704-4e01df99-019b-41bd-b8ea-b2ff508626e0/ime-position。
初步分析
- 疑似位置:
tests/visual-probe/ImePositionProbe.cpp的 F1/F2/F3WM_KEYDOWN分支。 - 触发条件: 输入法已经显示候选 UI,但没有向被子类化的 EasyX HWND 发送探测器所依赖的
WM_IME_STARTCOMPOSITION/WM_IME_COMPOSITION。 - 关键证据:
- F1
apiAttemptCount=0,F2apiAttemptCount=0,F3apiAttemptCount=2且两次成功。 - 原始事件序列中,F1/F2 只有
anchor_change;直到 F3 才出现ime_start -> ime_composition -> ime_end。 - F1/F2 截图显示候选框在窗口外,F3 截图显示候选框位于最后一次成功设置的位置附近。
- F1
- 根因边界: 这不是 DPI 换算错误;F3 的 IMM 调用和坐标值成功。问题是位置设置触发得太晚,并错误假定所有 IME 都会先向目标 HWND 发送同一组生命周期消息。
跟踪信息
- 首次发现时间: 2026-10-05 23:51(人工运行),2026-10-06 完成归档与定位
- 最后更新时间: 2026-10-06
- 修复版本:
43cf4ac(阶段 0C 视觉与 IME 坐标探测) - 验证版本: 三平台构建与单元测试通过;搜狗真实输入复验自动与人工状态均为
pass - 备注:
-ImeName只记录操作者预期,当前 HKL/IMM32 身份字段不能自动证明 TSF 输入配置文件;成功复验的实际搜狗身份由操作者确认并写入人工评审旁车。