Repository navigation
fix: 浮窗评审跟进——禁区点击激活、交互态基线回点关闭、激活失败完整退回被动态 - #67
Merged
Merged
Conversation
代码评审(双通道)对 d9b8f14 的三项主要发现,全部为局部修复: - 禁区单击不再激活浮窗(行为回归):mousedown 对拖拽禁区 (按钮/.selectable)只跳过拖拽,按压起点照记——单击「复制」 后空格/Esc 恢复可用;划选译文(位移 >4px)不上报位置,避免 把「没动过」固化成拖拽位置冲掉光标锚点 - 交互态回到基线应用永不关闭:看守观测到浮窗持有过前台后置闩 (ever_held_foreground),闩位后回到基线 = 用户回原处干活, 浮窗让路;闩位前豁免保留,激活链路瞬时抖动的防抖语义不变 - activate_popup 失败路径补 set_focusable(false):注释说退回 被动态但 WS_EX_NOACTIVATE 没恢复,留下半激活窗口 + 被动看守 在点击中途误关的竞态 - macOS 前台身份改用进程 pid 比对:bundle-id 子串匹配在应用 更名后静默失效,恰好复活激活自关 bug;pid 对比与包名无关 - stop() 顺带清 interactive 与闩位:关闭路径状态全归零 - activated 跨翻译不复位:新一轮 Loading 时复位,被动态弹出 不再渲染收不到键盘的「空格关闭」提示 - 主题同步加 last-value 守卫:class 变化但明暗未变时跳过 IPC - macOS stub _dark 参数的宏命名契约写入文档注释 测试:popup_watch 新增 6 例(闩位前/后基线回点、闩位后浮窗仍 前台不关、baseline=0、stop 清状态、两平台闩位观测条件); cargo test --lib 231 通过,clippy -D warnings 零警告; tsc 零错误,vitest 25 通过
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
对 #66(d9b8f14)双通道代码评审发现的回归与缺陷的跟进修复,全部为局部改动,不动架构。
修复内容
1. 禁区单击不再激活浮窗(行为回归,评审 H1)
src/windows/popup/PopupWindow.tsxisDragBlockingTarget提前到pressOrigin赋值之前,点击「复制」按钮/红绿灯/可选文本后不再转交互态——最高频路径之后 Esc/空格全死、快捷键提示永不出现preventDefault(保选区),按压起点照记,mouseup ≤4px 照常激活2. 交互态回到基线应用永不关闭(行为回归,评审 M1)
src-tauri/src/system/popup_watch.rsforeground == baseline时恒不关,激活后点回编辑器浮窗永远悬停(旧 onFocusChanged 路径会关)ever_held_foreground闩位:交互态下轮询一旦证实浮窗持有过前台(Windows:fg==popup 句柄;macOS:本进程折叠语义下 fg==0)即置闩,闩位后回到基线应用也关闭3. activate_popup 失败路径未恢复 focusable(false)(评审 M2,先在问题)
src-tauri/src/commands/system.rsset_focus失败分支注释说「退回被动态」但 WS_EX_NOACTIVATE 没恢复,留下半激活窗口 + 被动看守在用户点击中途误关的竞态窗口set_focusable(false),退回完整4. macOS 前台身份改用 pid 比对(评审架构 WATCH②)
bundleIdentifier().contains("quicktranslate")子串匹配在应用更名/重签后静默失效——届时激活后前台查询返回本进程 pid ≠ 0,交互态判定立刻误判「用户切走」,恰好复活 fix: 浮窗点击激活后自闪退与空格关闭失效,玻璃材质跟随应用主题 #66 修掉的激活自关 bugpid == std::process::id(),与包名解耦5. 其余评审项
stop()顺带清interactive与闩位(关闭路径状态全归零)activated在新一轮 Loading 时复位,被动态弹出不再渲染收不到键盘的「空格关闭」提示_dark参数的宏命名契约写入文档注释测试
cargo test --lib231 通过(225 + 6 新增:闩位前/后基线回点、闩位后浮窗仍前台不关、baseline=0、stop 清状态、两平台闩位观测条件)cargo clippy -D warnings零警告;cargo fmt --check通过tsc --noEmit零错误;vitest 25 通过评审报告结论
code-reviewer 通道 REQUEST CHANGES(3 项全修)+ architect 通道 WATCH(4 项非阻塞跟进中 3 项已落地,第 4 项「交互态基线回点作为产品决策记录」即本 PR 的第 2 项改动本身)。未动的两项先在问题已记录:hidePopup 90ms 延迟命中新一轮翻译的竞态、Linux 关闭权威结构性失效。