Skip to content

fix(desktop): 修复资源监视器全屏切换异常 - #3493

Merged
DavidShenXD merged 4 commits into
mainfrom
cindy/peaceful-euclid
Aug 27, 2026
Merged

fix(desktop): 修复资源监视器全屏切换异常#3493
DavidShenXD merged 4 commits into
mainfrom
cindy/peaceful-euclid

Conversation

@DavidShenXD

Copy link
Copy Markdown
Collaborator

这次改了什么

摘要

  • 移除资源监视器 controller 对主窗口全屏状态的显式读取、setFullScreen 同步和异步退出状态机,交回 macOS 原生 Space / 全屏生命周期。
  • macOS 资源监视器保持独立顶层窗口;切换原生全屏 Space 时不再把主窗口的短暂 hide 误判为需要收起资源窗口,同时继续跟随主窗口最小化、关闭和退出。
  • 由资源监视器自身广播原生全屏状态,进入全屏后收起标题栏红绿灯让位,避免内容错位。
  • 保留已验收的原生行为:资源监视器打开时的呈现跟随主窗口当下的 macOS 全屏状态,而不是恢复资源监视器上一次关闭时的状态;用户仍可正常手动进入或退出全屏。

变更类型

  • feat 新功能
  • fix 缺陷修复
  • refactor / perf 重构或性能优化
  • docs / test / chore 文档、测试或工程维护
  • 其他:

范围

  • 关联 Issue / 需求:资源监视器在 macOS 原生全屏切换时窗口消失或界面异常。
  • 本 PR 包含:资源监视器 BrowserWindow、窗口生命周期 controller、专用 preload、全屏标题栏适配及相关单测。
  • 明确不包含:主窗口全屏持久化、右侧栏窗口、Windows / Linux 窗口架构调整。
  • 用户可见变化:资源监视器可正常进入和退出 macOS 原生全屏,切换时界面不再消失;打开时保留系统原生的主窗口全屏状态继承行为。
  • 是否存在 breaking change:无。

UI 变化

  • macOS 资源监视器进入原生全屏后,标题栏左侧让位从 80px 收为 12px;退出后恢复红绿灯让位。
  • 引用的设计规范:DESIGN.md §5「Spacing System」沿用既有 12px / 80px 标题栏间距;§8「Desktop Window」按 BrowserWindow 状态自适应;§10「Light / Dark Dual-Mode Delivery Gate」继续复用语义 token,不新增颜色或单模式条件样式。

怎么验证的

自动验证

pnpm test:unit:related
结果:通过(apps/desktop related unit)

pnpm --filter desktop run --if-present typecheck
结果:通过

pnpm check:dco
结果:通过(1 个提交已签名)

git diff --check
结果:通过

手工验证

  • macOS 隔离 Dev 沙盒:资源监视器从普通窗口进入原生全屏、退出全屏、关闭并重新打开,界面均正常且不消失。
  • 主窗口全屏时打开资源监视器,确认沿用系统原生全屏呈现;资源监视器退出全屏并关闭后,在主窗口仍全屏时重新打开,仍按主窗口当下状态呈现。该行为已由用户验收并决定保留。

未执行的验证

  • Windows / Linux 未做实机验证;parent 子窗口行为由 controller 单测和静态契约覆盖。
  • 未分别进行 Light / Dark 实机目检;本次只调整既有语义 token 布局间距,不新增颜色。

风险

风险分类

  • 无已知风险
  • SQLite / migration
  • system prompt
  • 协议兼容
  • 权限 / 安全 / 用户数据
  • 存量插件兼容(批准状态 / 指纹 / manifest 校验 / 安装布局 / 包格式)
  • 原生层 / fingerprint / OTA
  • 跨平台差异
  • 其他:

影响与回滚

  • 影响范围:仅 Desktop 资源监视器辅助窗口;macOS 使用独立顶层窗口,Windows / Linux 继续保持 parent 关系。
  • 回滚 / 降级方式:回滚本 PR,恢复 controller 显式同步主窗口全屏状态及原有退出状态机。

提交前检查

  • 已 review 完整 diff
  • 每个 commit 都带 DCO 签名(git commit -s,见 DCO
  • UI 改动已在「UI 变化」注明引用的设计规范章节(不涉及 UI 则跳过)
  • 未提交凭证、令牌或授权文件
  • 已补充必要文档
  • 已确认测试结果或说明未执行原因

Signed-off-by: David <david@DaviddeMacBook-Air.local>
@DavidShenXD
DavidShenXD requested a review from a team as a code owner August 27, 2026 07:05

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: bb7b1efd19

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread apps/desktop/src/main/resource-usage-window/controller.ts Outdated
@greptile-apps

greptile-apps Bot commented Aug 27, 2026

Copy link
Copy Markdown

Greptile Summary

本次修改将 macOS 资源监视器的全屏生命周期交还给原生窗口管理,并让资源窗口自行向 renderer 广播全屏状态。

  • macOS 不再由 controller 镜像主窗口全屏状态,也不再把 Space 切换期间的 owner hide 当作收起信号。
  • 资源窗口 preload 新增全屏状态查询与事件订阅能力。
  • 标题栏在原生全屏时将左侧让位从 80px 缩至 12px。
  • 更新 controller、安全契约和布局单元测试以覆盖新行为。

Confidence Score: 5/5

该 PR 看起来可以安全合并,未发现由本次修改引入且具有具体可达失败场景的问题。

macOS 主窗口的可达隐藏路径仍会正确收起资源窗口,全屏状态 IPC 与 renderer 订阅契约保持一致,变更后的显示、隐藏和复用流程未呈现可确认的错误行为。

Important Files Changed

Filename Overview
apps/desktop/src/main/resource-usage-window/controller.ts 删除显式全屏同步与退出状态机,并按平台调整 owner 显隐事件绑定;未发现具有当前可达触发条件的缺陷。
apps/desktop/src/main/resource-usage-window/window.ts 由资源窗口自身广播原生全屏进入和退出事件,保持现有隔离与专用 preload 配置。
apps/desktop/src/preload/resourceUsagePreload.ts 为资源窗口补充受控的全屏状态查询和事件订阅接口,与现有 renderer hook 契约一致。
apps/desktop/src/renderer/components/resource-usage/ResourceUsageWindowLayout.tsx 使用窗口自身的 macOS 全屏状态动态切换标题栏间距,并补充了对应布局测试。
apps/desktop/src/main/resource-usage-window/tests/controller.test.ts 测试已调整为验证原生全屏生命周期、macOS Space 切换和非 macOS owner 显隐行为。

Sequence Diagram

sequenceDiagram
  participant U as 用户
  participant W as 资源监视器窗口
  participant P as 专用 Preload
  participant R as Renderer
  U->>W: 点击原生全屏按钮
  W->>P: fullscreen-change
  P->>R: onFullscreenChange(isFullscreen)
  R->>R: 调整标题栏左侧间距
  U->>W: 关闭资源监视器
  W->>W: hide(保留窗口实例)
  U->>W: 再次打开
  W->>W: show + focus
Loading

Reviews (1): Last reviewed commit: "fix(desktop): 修复资源监视器全屏切换异常" | Re-trigger Greptile

@MagicLizi

Copy link
Copy Markdown
Contributor

@DavidShenXD 👋 这个 PR 还有 1 条 review conversation 没 resolve(apps/desktop/src/main/resource-usage-window/controller.ts),auto-review 因此暂时跳过、没法继续审查 / 合并。

如果你已经按评论改完或回应了,请到对应 thread 上点 Resolve conversation;全部 resolve 后,下一轮 auto-review 会自动重新审查这个 PR。

@MagicLizi MagicLizi added status:ci-failed CI 失败(review-pr 自动维护,仅展示) touches:core 改动碰到架构核心路径(review-pr 自动维护,仅展示) touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示) labels Aug 27, 2026
Signed-off-by: David <david@DaviddeMacBook-Air.local>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 31385a27d2

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread apps/desktop/src/main/resource-usage-window/controller.ts
@DavidShenXD

Copy link
Copy Markdown
Collaborator Author

反馈已处理

已处理:

  • 已处理 macOS 原生全屏状态下按 ⌘W 直接隐藏缓存资源监视器、导致重开后仍处于旧全屏 Space 的问题。
  • 已回复对应行评,并将 review conversation 标记为 resolved。

变更:

  • 资源监视器关闭时若处于 macOS 原生全屏,先调用 setFullScreen(false),等待 leave-full-screen 后再隐藏缓存窗口。
  • 增加可见性代次保护,避免迟到的 leave-full-screen 回调误藏已经重新打开的窗口。
  • 补充原生关闭和关闭后立即重开的竞态回归测试;不恢复已移除的 owner 全屏镜像逻辑。

验证:

  • pnpm --filter desktop exec vitest run src/main/resource-usage-window/tests/controller.test.ts src/main/resource-usage-window/tests/windowSecurity.test.ts:通过,2 个测试文件、40 个测试。
  • pnpm --filter desktop run --if-present typecheck:通过。
  • pnpm test:unit:related:通过,apps/desktop unit PASS。
  • pnpm exec prettier --check(本次 4 个变更文件):通过。
  • pnpm check:dco:通过,PR 范围内 2 个 commit 均已 sign-off。

备注:

  • 修复提交:31385a27d。
  • 未执行 macOS GUI 手工验证;行为由 controller 回归测试覆盖。Windows / Linux 路径由 darwin 平台门禁隔离,未做手工运行验证。
  • 未合并 PR。

Signed-off-by: David <david@DaviddeMacBook-Air.local>
@DavidShenXD

Copy link
Copy Markdown
Collaborator Author

反馈已处理

已处理:

  • 已处理后续 P1:macOS 退出原生全屏时若未收到 leave-full-screen,资源监视器可能保持可见但采样已停止。
  • 已回复对应行评,并将新增 review conversation 标记为 resolved。

变更:

  • 为退出全屏后的隐藏流程增加 2 秒可取消 fallback;事件缺失时仍完成缓存窗口隐藏。
  • fallback、原生事件和重新打开共用可见性代次保护;正常事件、重开和窗口重置都会清理 timeout,迟到事件不会重复隐藏或误藏重开的窗口。
  • 新增缺失 leave-full-screen 的回归测试,并补充正常事件及重开路径的 timeout 清理断言。

验证:

  • pnpm --filter desktop exec vitest run src/main/resource-usage-window/tests/controller.test.ts src/main/resource-usage-window/tests/windowSecurity.test.ts:通过,2 个测试文件、41 个测试。
  • pnpm --filter desktop run --if-present typecheck:通过。
  • pnpm test:unit:related:通过,apps/desktop unit PASS。
  • pnpm exec prettier --check(本次 4 个变更文件):通过。
  • pnpm check:dco:通过,PR 范围内 3 个 commit 均已 sign-off。

备注:

  • 后续修复提交:d2bc3c7b7。
  • 未执行 macOS GUI 手工验证;异常事件缺失路径由 fake timer 回归测试覆盖。Windows / Linux 路径未做手工运行验证。
  • 未合并 PR。

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d2bc3c7b7c

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread apps/desktop/src/main/resource-usage-window/controller.ts Outdated
Comment thread apps/desktop/src/main/resource-usage-window/window.ts Outdated
@MagicLizi

Copy link
Copy Markdown
Contributor

@DavidShenXD 👋 这个 PR 还有 2 条 review conversation 没 resolve(apps/desktop/src/main/resource-usage-window/controller.ts / apps/desktop/src/main/resource-usage-window/window.ts),auto-review 因此暂时跳过、没法继续审查 / 合并。

如果你已经按评论改完或回应了,请到对应 thread 上点 Resolve conversation;全部 resolve 后,下一轮 auto-review 会自动重新审查这个 PR。

Signed-off-by: David <david@DaviddeMacBook-Air.local>
@DavidShenXD

Copy link
Copy Markdown
Collaborator Author

反馈已处理

已处理:

  • 修复 macOS 原生全屏进入动画尚未结束时关闭资源监视器的竞态,确保先取消全屏转换再隐藏。
  • 修复 macOS 退出全屏动画期间交通灯已恢复、标题栏留白仍保持全屏状态的问题。

变更:

  • controller 跟踪资源窗口正在进入全屏的状态,并与 isFullScreen() 一起控制退出全屏后的隐藏流程。
  • 资源窗口复用统一全屏状态广播器,通过 resize 与显示器边界在退出动画开始时提前同步 Renderer。
  • 更新并补充进入动画关闭、共享广播器与窗口安全契约测试。

验证:

  • pnpm --filter desktop exec vitest run src/main/resource-usage-window/tests/controller.test.ts src/main/resource-usage-window/tests/windowSecurity.test.ts src/main/tests/mainWindowFullscreenStartup.test.ts src/renderer/components/resource-usage/tests/ResourceUsageWindowLayout.test.tsx:57/57 通过。
  • pnpm --filter desktop run --if-present typecheck:通过。
  • pnpm test:unit:related:通过。
  • pnpm check:dco:PR 范围 4 个提交全部通过。
  • git diff --check:通过。

备注:

  • 新提交为 23236a5;未重新进行 macOS 实机动画边界验收,等待新一轮 CI 完成。

@MagicLizi MagicLizi added status:ci-running CI 还在跑(review-pr 自动维护,仅展示) and removed status:ci-failed CI 失败(review-pr 自动维护,仅展示) labels Aug 27, 2026
@DavidShenXD
DavidShenXD merged commit 1848e79 into main Aug 27, 2026
24 of 26 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

status:ci-running CI 还在跑(review-pr 自动维护,仅展示) touches:core 改动碰到架构核心路径(review-pr 自动维护,仅展示) touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants