fanlusky
18cf3efe0a
refactor(windows): 引入按键失败策略与本地重同步
新增 DeferredKeyFailurePolicy.h:把「按键为什么没能应用」映射成四种代价,
Stale(只丢这颗键)、Offline(离线原始通道,丢键并吞掉队列,保留本地组合)、
Resync(管道健康,但本地组合与 Server 可能不一致)、Transport(传输坏了或
状态未知,走完整重置)。纯函数,不依赖 TSF/COM,配套 tests/deferred_key_failure_policy.cpp。
新增 _RequestLocalResync:复用本地重置闸门取消组合,保持「先重置再排空」的
顺序,但不轮换 focus token、不关任何管道;闸门重新打开时在同一个 token 上补发
HideCandidateWnd,让 Server 清掉自己的组合(闸门关着时取消路径发出的 Hide 会被
挡下,所以必须补发)。重同步期间不清 _workerCommitReady,否则 WM_IpcReconnect
会把一次重同步等成 150 ms 超时并升级成完整重置。
_ResetSessionAfterFailure 统一处理失败后的会话丢弃:清空延迟队列(队列里的键
是按即将丢弃的组合分类的,一律吞掉,既不交还宿主也不重发),保留退格长按
守卫(#347),再按类别触发重置;重置期间把投影设为空组合,重置结束且队列为空
时释放投影,健康路径(包括 Excel 首键的同步排空)不会被残留的屏障挡住。
非按键路径里原本走完整传输重置、但管道其实没坏的几处改走重同步:OnEndEdit 的
组合属性检查与 EndComposition 失败、OnSetFocus 文档不匹配、WM_CheckGlobalCompartment
切换提交失败、_PostServerTextDelivery 投递失败。
2026-09-27 18:50:07 +08:00
..
2026-09-10 03:04:23 +00:00
2026-09-10 03:04:23 +00:00
2026-09-12 00:55:56 +08:00
2026-09-10 03:04:23 +00:00
2026-09-27 18:50:07 +08:00