fix(remote-desktop): 修复 macOS 全屏后工具栏无法唤出 - #5466
Conversation
全屏时工具栏收起后只靠 :hover 展开,但工具栏是 -webkit-app-region: drag, 拖拽区不会收到指针事件;同时 macOS 菜单栏会滑下覆盖顶端。全屏时取消拖拽区, 改为指针触顶展开、移回画面区域才收起。 Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
MagicLizi
left a comment
There was a problem hiding this comment.
PR #5466 独立代码审查报告(standard 档)
head=45d01efbf5c633fc0ea027e110e29a4fc1a1c82d base=75516649929fdbb8948f36cd40e08ebd1197bc17(main)
diffHash=32b74f071e8f05712ff2aab148f629af66b98e332ea5cb6a2194539bc258d6bc
Findings
- 无。没有 P0/P1。
审查过程中的定性记录(非 Findings):
- greptile bot 评论提到「macOS 菜单栏覆盖顶端时可能无法唤出」(soft flag,非 thread,两条
greptile thread 均已 Resolve)。核对实现:指针上移过程中先经过clientY <= 8的触顶判定
(早于系统菜单栏接管指针),展开后只有指针移回画面(工具栏高度 + 16px 以下)才收起,
菜单栏滑下覆盖顶端期间没有满足收起条件的 pointermove,工具栏保持展开;新回归测试覆盖了
该三段路径。属设计内权衡,不构成可复现 P1。 - UI 证据缺失(
format.uiEvidenceMissing=true):按非阻断提醒规则处理,不打回;PR「UI 变化」
已注明不涉及新视觉,本 PR 未改颜色/尺寸/动画。 - P2 级观察(不报告、不阻断):远程会话内拖拽(
viewerInput的 pointer capture)指针移向
本地屏幕顶端时也会触发工具栏展开覆盖画面顶部;与原:hover方案同级别的固有权衡,仅影响
macOS 全屏。
Rule coverage
按 rule-map 命中路径(apps/desktop/src/renderer/**、UI 改动)读取原文:
AGENTS.md+docs/dev-rules/development-workflow.md(严重度口径、PR 模板事实源):
diff 单一目的(修复 macOS 全屏工具栏唤出),Title/Description 与 diff、测试完全一致,
无夹带;验证一节如实标注未执行项(macOS 真机、Light/Dark 目检)。逐项结论:通过。docs/dev-rules/electron-security-and-process-boundaries.md§8 Review 清单:- Renderer 无新增特权数据/能力(仅 DOM 指针监听 + 一个
data-*属性);2-6) 未触碰
BrowserWindow/WebView/preload/IPC/CSP/Fuses;7) 无新增安全边界;8) 不涉及独立辅助窗口。
-webkit-app-region: no-drag仅在.remote-viewer-fullscreen作用域内生效,非全屏拖拽
行为不变(useMacFullscreen非 mac 恒 false,Windows/非全屏行为不变,与 PR 风险说明一致)。
逐项结论:通过。
- Renderer 无新增特权数据/能力(仅 DOM 指针监听 + 一个
docs/dev-rules/engineering-conventions.mdReview 清单:- 无新增日志;2-4) 无 IPC/main 侧改动;5) 行为差异被限制在 macOS 全屏,PR 风险字段已声明
跨平台差异并给出回滚方式,未实测平台已标注;6) 无新增 UI 文案(无 i18n key 变动); - 新增常量带职责注释;8) 动画未改动(150ms translateY,
prefers-reduced-motion原样保留),
状态切换通过data-revealed+ transform 完成,compositor-only、无跳变。逐项结论:通过。
- 无新增日志;2-4) 无 IPC/main 侧改动;5) 行为差异被限制在 macOS 全屏,PR 风险字段已声明
docs/design-rules/DESIGN.md(UI 改动强制):不涉及颜色 token、字号、圆角、组件替换或新
视觉,仅交互唤出/收起行为与全屏下 drag region 修正;无硬编码颜色绕过 token、无自造组件。
逐项结论:通过。- 共享符号/调用方追踪:
useMacFullscreen(未改动)语义一致;CSS:hover选择器仅被
.remote-viewer-fullscreen .remote-viewer-toolbar一处使用,改为[data-revealed='true']
无其他读方;toolbarref 局部使用;错误/回滚路径无涉(revert 即回原:hover)。
测试覆盖:viewerWindow.test.tsx新增触顶展开/保持/收起回归,viewerInput等 11 个
remote-desktop 测试文件全数通过。
Verification
在本 PR worktree(HEAD=45d01efb)实际执行:
pnpm install --prefer-offline → exit 0(15.1s)
npx vitest run .../__tests__/viewerWindow.test.tsx → 7 passed(exit 0)
npx vitest run src/renderer/features/remote-desktop → 11 files / 132 tests passed(exit 0)
pnpm --filter desktop run typecheck → 0 errors(exit 0)
node scripts/pre-merge-check.mjs 5466 ... → head/authority/CI/thread 全部核验通过,
唯一 blocker = 缺另一位维护者 Approve(预期)
未执行:heavy 档专项(本 PR 为 standard 档,不适用);macOS 真机全屏实测与 Light/Dark 目检
(PR 已如实标注未执行,diff 未触及颜色/主题,UI 证据缺失按非阻断提醒规则处理)。
Overall
pass — 没有 P0/P1。0 条 P0、0 条 P1。
这次改了什么
摘要
桌面版远程桌面窗口在 macOS 全屏后,顶部工具栏会收起,只留 8px 的感应条,原本靠 CSS
:hover唤出。但工具栏整体是-webkit-app-region: drag,Electron 的拖拽区不会把指针事件交给页面,:hover永远不触发;同时鼠标触顶时 macOS 菜单栏会滑下覆盖顶端。结果是工具栏一旦收起就回不来,只能退出全屏。本 PR:
-webkit-app-region: no-drag(全屏下没有窗口可拖)。:focus-within时保持展开的规则不变。变更类型
feat新功能fix缺陷修复refactor/perf重构或性能优化docs/test/chore文档、测试或工程维护范围
UI 变化
不涉及新视觉:工具栏外观、尺寸、动画(150ms translateY,reduced-motion 下无动画)沿用原实现,仅修复唤出条件。平台:macOS 全屏。
--surface/--border-default语义 token,Light / Dark 行为一致,未新增颜色。怎么验证的
自动验证
手工验证
未完成,见下。
未执行的验证
风险
风险分类
影响与回滚
useMacFullscreen非 mac 恒为 false,Windows / 非全屏行为不变)。:hover唤出逻辑。提交前检查
git commit -s,见 DCO)