Skip to content

[windows] 滑词追问浮窗:文案非平台特化、无法拖动、关闭交互不可靠 #205

@appergb

Description

@appergb

现象

Windows 端的滑词追问(Selection Voice QA)浮窗存在多处问题:

  1. 文案非 Windows 特化:浮窗里 `emptyTitle` / `emptyDesc` / `recordingHint` / `statusIdle` / `errorRetryHint` 全部硬编码 "Option" / "按 Option"。Windows 用户没有 Option 键,dictation 触发键通常是 Right Alt 或其他配置。
  2. 无法拖动:toolbar 的拖拽实现只走 macOS 路径——`lib.rs::make_qa_window_draggable_macos` 通过 NSWindow `setMovableByWindowBackground:YES` 让整个窗口可拖。Windows 上既没设 `data-tauri-drag-region`,也没等价的原生分支,浮窗一旦打开就钉死在屏幕中央偏下。
  3. 关闭交互不可靠:QA 窗口配的是 `focus: false`(避免抢前台 app 焦点导致 Cmd+C 拿不到选区),Windows 上 `SW_SHOWNOACTIVATE` 会让窗口完全不获得键盘焦点,所以 `window.addEventListener('keydown', Esc)` 永远不触发。Esc 关不了。X 按钮点击虽然能调用 `qa_window_dismiss`,但首次点击前 WebView2 也不接 focus,键盘 fallback 缺失。
  4. 整体「无法正常使用」:以上三条叠加 → 浮窗弹出后只能靠重按 `Ctrl+Shift+;` 切换可见性,体验和 macOS 不对等。

根因(已查证)

  • 文案:`src/i18n/zh-CN.ts` 和 `src/i18n/en.ts` 的 `qa.*` 键里写死 "Option"(zh-CN.ts:39-50、en.ts:41-49)。
  • 拖动:`src-tauri/src/lib.rs:659-677` 的 `make_qa_window_draggable_macos` 用 `#[cfg(target_os = "macos")]` 标注,且 `src/pages/QaPanel.tsx:200-201` 注释明确写「前端不需要 onMouseDown / data-tauri-drag-region」——Windows 没等价路径。
  • Esc:`QaPanel.tsx:136-145` 在 window 上注册 keydown,但 Windows `focus: false` 不给 keyboard focus → 不触发。

修复目标

  • 浮窗里所有提到 "Option" 的文案改成读「用户当前的录音热键 label」并通过 i18n `{{recordHotkey}}` 插值显示,跟 Settings → 划词追问 同款做法。
  • toolbar 增加 `data-tauri-drag-region` 让 Windows 走 Tauri 标准 `WM_NCLBUTTONDOWN(HTCAPTION)` 拖拽路径;macOS 保留 `setMovableByWindowBackground` 不变,两者并存不冲突。
  • 让浮窗在用户点击后获得 focus,使 Esc 在 Windows 也能工作;保留 X 按钮 + 全局快捷键回切两条兜底路径。
  • `selectionAsk.howto.windowDesc` 文案不再断言 "标题栏可拖动"——改成同时适用 mac / win 的中性描述。

验证

  • macOS:浮窗仍可由整窗口任意位置拖拽,文案显示用户配置的录音键(如「右 Option」)。
  • Windows:浮窗 toolbar 可拖;文案显示「右 Alt」等 Windows 实际触发键;点 X / 按 Esc / 重按全局热键三条路径都能关掉浮窗。

将开 PR 收口。

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingwindowsWindows-specific issue

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions