Skip to content

[windows] 剪贴板恢复/sentinel 导致划词追问与划词编辑无法抓到选区 #1024

Description

@HKLHaoBin

现象

  • 触发条件:Windows 上选中文字后,触发划词追问或划词编辑(以及依赖模拟 Ctrl+C 的选区润色)。尤其容易出现在 Chrome / Chromium 内核应用,且系统开启了剪贴板历史。
  • 当前表现:即使用户已经选中文本,OpenLess 仍判定为无选区(selectionVoiceNoSelection / selectionPolishNoSelection)。划词提问面板与划词编辑无法进入正常流程。
  • 证据:选区抓取会先往系统剪贴板写入 sentinel,再模拟 Ctrl+C 读取选区,随后恢复原剪贴板。Windows 剪贴板历史的异步监听会在 sentinel 写入后仍占用剪贴板,目标应用的 Ctrl+C 因此静默失败,sentinel 校验把这次抓取当成「剪贴板未变化 / 无选区」。

影响

  • 划词追问、划词编辑在 Windows 上不可用或极不稳定。
  • 用户只能看到无选区提示,无法从导出日志区分「真的没选区」和「模拟复制被剪贴板恢复/历史抢锁」。
  • 无选区失败时胶囊会停在 Error,不会按听写口径自动收回。

建议接受标准

  • Windows:在记事本 / Chrome 中选中一段文字,划词追问能抓到选区并打开提问面板。
  • Windows:选中文字后划词编辑能进入语音编辑 / QA 预览,而不是立刻报无选区。
  • 开启系统剪贴板历史时,上述两条仍然成立。
  • 导出的 openless.log 能看到选区捕获原因(例如 clipboard_unchanged_sentinel / 成功 capturereason),而不是只有笼统的 no-selection。
  • 无选区 begin 失败时,胶囊约 2 秒后自动收回。
  • 不改动上游版本号和 release workflow。

TODO / 不确定项

  • 尚未在每一种启用剪贴板历史的 Windows 版本上完整回归;优先验证 Chrome 与普通 Win32 文本框。
  • macOS AX 直读路径不走这条 sentinel;本次修复范围是 Windows 模拟复制 fallback。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions