Skip to content

增加主题切换并修复欢迎窗口关闭后应用未退出的问题 - #57

Merged
1lck merged 2 commits into
preview/0.2.0from
feat/theme-switcher
Aug 12, 2026
Merged

增加主题切换并修复欢迎窗口关闭后应用未退出的问题#57
1lck merged 2 commits into
preview/0.2.0from
feat/theme-switcher

Conversation

@arkleselect

Copy link
Copy Markdown
Collaborator

变更内容

本 PR 增加了主题切换功能,并修复关闭最后一个欢迎窗口后应用没有彻底退出的问题。

主题功能

  • 增加 Lithe、Codex 和 Linear 三种主题
  • 支持跟随系统、浅色和深色三种外观模式
  • 默认保持原有的 Lithe 深色主题
  • 保存用户选择的主题和外观设置
  • 适配主要界面、代码编辑器、Diff、终端及数据库工作区的深浅色显示
  • 统一部分工具图标在不同主题下的颜色表现

窗口关闭行为

  • 在项目界面关闭窗口时,先关闭当前项目并返回欢迎页面
  • 关闭最后一个欢迎窗口时彻底退出 Lithe
  • 修复窗口关闭后进程仍然运行、Dock 仍显示运行状态的问题

验证

  • 测试环境:macOS 13、Swift 6.2.4
  • ./scripts/test-macos.sh 通过
  • 125 tests in 6 suites passed
  • git diff --check 通过
  • 已手动验证主题切换和设置持久化
  • 已手动验证关闭最后一个欢迎窗口后 Lithe 退出

主题切换可以在“设置-通用-外观”中选择

@arkleselect
arkleselect requested a review from 1lck as a code owner August 11, 2026 14:26
@xiaoyumuxi

Copy link
Copy Markdown
Collaborator

整体看下来方向没问题,CI 也通过了,不过我这边有几个点建议合并前再调整一下:

  1. RootView 里现在通过 .id("\(session.id):\(settings.colorTheme.rawValue)") 来强制刷新主题,这会导致整个 WorkbenchView subtree 被销毁重建。WorkbenchView 里面有不少 @State,所以切换主题时可能会把 sidebar 宽度、面板状态、弹窗状态等临时 UI 状态一起重置。建议不要通过重建整个 Workbench 来刷新主题。
  2. CodeTextView.applyAppearanceLineNumberGutterView.applyAppearance 目前只比较 isDark,没有比较 colorTheme。例如 Lithe Dark -> Codex DarkisDark 没变化,如果去掉上面的 .id(),编辑器和 gutter 就不会更新主题。这里建议同时记录并比较 theme + isDark
  3. Terminal 的 SwiftTerm 原生视图目前只根据 light/dark 使用固定颜色,没有接入 AppColorTheme。这样切 Codex / Linear 后,外层 UI 会变,但 terminal 内容区域还是原来的固定配色,视觉上可能不一致。
    窗口关闭这一块我看下来逻辑是通的:项目打开时关闭窗口会先关闭项目并回欢迎页,欢迎页作为最后一个窗口关闭后应用退出,这部分暂时没看到问题。
    所以我这边建议合并前优先处理前两个问题,Terminal 主题一致性可以后续单独补。

@arkleselect

Copy link
Copy Markdown
Collaborator Author

已按建议调整:

  1. 移除了 RootView 中根据 colorTheme 重建 WorkbenchView 的 .id,切换主题时会保留 Workbench 内的临时 UI 状态。
  2. CodeTextView 和 LineNumberGutterView 现在都会同时比较 theme 和 isDark,同一深浅模式下切换不同主题也能正确刷新。

本地 ./scripts/test-macos.sh 已通过,125 tests in 6 suites passed。

@1lck
1lck merged commit c37ffce into preview/0.2.0 Aug 12, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants