Skip to content

优化 macOS 设置窗口布局、控件及全局按钮样式 - #944

Open
arkleselect wants to merge 25 commits into
previewfrom
codex/settings-panel-styles
Open

arkleselect wants to merge 25 commits into
previewfrom
codex/settings-panel-styles

Conversation

@arkleselect

@arkleselect arkleselect commented Sep 28, 2026 •

Copy link
Copy Markdown
Collaborator

概述

参考 IntelliJ IDEA 社区版公开的主题源码和 JetBrains 官方界面规范,统一 macOS 设置窗口右侧页面及常用控件的样式。保留现有设置行为;此 PR 为草稿,供界面和交互审查。

修改内容

  • 在右侧页面顶部显示设置分类路径,统一内容左边距、带分隔线的分组标题和设置行布局;覆盖通用、编辑器、快捷键、项目运行时、运行配置、Git 和语言服务等设置页。
  • 在 LitheTheme 中集中定义设置窗口使用的明暗背景、输入框与下拉框底色、边框、弹层、强调色及选中态;修正亮色模式下选中项的文字对比度,避免各页面各自指定冲突颜色。
  • 将普通设置下拉框从 macOS 原生箭头弹层改为共享的无箭头列表弹层,支持当前项蓝色整行高亮、悬停与键盘选择、Esc 和点击外部关闭、超过十项滚动,以及空间不足时向上弹出;移除单选列表中的勾号,并将行高调整为 24 点、弹层改为独立圆角;鼠标悬停不再强制滚动,键盘移动只在需要时滚动,屏幕空间不足时缩小弹层而不遮挡控件。
  • 让搜索框、下拉框、复选框、分段控件、步进控件、单行和多行输入共用设置控件样式;替换相关设置页中与这套样式冲突的原生 Picker 和 Toggle;为自定义勾选框及分段控件补齐辅助功能状态。
  • 增加弹层定位测试,更新应用设置功能矩阵及其生成的文档视图。

参考依据

验证

  • ./scripts/test-macos.sh --filter 'SettingsSelectPopupGeometryTests|SettingsAppearanceContainerTests|ProjectRuntimeSettingsTests|KeyboardShortcutTests|LSPControlCenterPresentationTests|GitSettingsPresentationTests':41 项测试通过(含新增的小屏幕弹层避让测试)。
  • ./.agents/skills/write-stable-tests/scripts/verify-test-stability.sh:通过。
  • ./.agents/skills/write-stable-tests/scripts/test-stability-macos.sh -- --filter 'SettingsSelectPopupGeometryTests':3 项测试通过,单项约 0.001 秒,并生成 HTML 报告。
  • ./scripts/test-macos.sh --filter GitStatusObservationTests --no-parallel:13 项测试通过;其中一项在完整并行测试中失败。
  • ./scripts/test-macos.sh:1626 项测试中出现 44 个失败,分布在未改动的 Git、文档及模块协调等测试;主要表现为等待信号超时,尚未确认整套测试通过。
  • ./scripts/verify-service-boundaries.sh:通过。
  • ./scripts/verify-platform-feature-matrix-change.sh origin/preview HEAD 与 ./scripts/verify-platform-feature-matrix.sh:通过。
  • git diff --check:通过。

待审查事项

新增的下拉弹层视觉细节尚待真实窗口复查。功能矩阵的 verificationStatus 仍为 pending,因为提交后尚未完成所有设置页面及亮色、暗色、跟随系统模式的完整视觉复查。AI 提交信息格式选择器是展示说明和预览的专用控件,仍保留原有的独立弹层。

本次审查修复

  • 补齐 macOS 简体中文资源中设置页面包屑的五个分类译文:外观与行为、构建/执行/部署、语言与框架、版本控制、工具。切换简体中文后,分类路径不再混用英文。
  • 验证:plutil -lint macos/Resources/zh-Hans.lproj/Localizable.strings、./scripts/test-macos.sh --filter AppLocalizationTests --no-parallel(18 项通过)、./scripts/verify-runtime-bundle-immutability.sh、功能矩阵检查及变更门禁、git diff --check 均通过。
CleanShot 2026-09-28 at 14 18 40

快捷键设置页补充

  • 按 IDEA 社区版 KeymapPanel 的分类树与工具栏结构,将 macOS 快捷键页的卡片列表改成紧凑的可折叠分类树;操作可以选中,选中行显示强调色,工具栏提供全部展开、全部折叠、编辑选中操作与搜索。
  • 保留已有快捷键录制、删除、单项重置和全部恢复默认功能;搜索结果自动展开匹配分类。当前只有 macOS 一套快捷键配置,因此配置名称只读显示,多套预设切换留待后续独立实现。
  • 补充工具栏提示的简体中文译文,更新功能矩阵的 macOS 验证步骤。
  • 验证:./scripts/test-macos.sh --filter KeyboardShortcutTests --no-parallel(19 项通过),./scripts/test-macos.sh --filter AppLocalizationTests --no-parallel(18 项通过),./scripts/verify-service-boundaries.sh、运行时程序包只读检查、功能矩阵检查及变更门禁、git diff --check 均通过。实际窗口的亮暗色与缩放视觉复查仍待完成。

快捷键页视觉与图标调整(后续提交)

  • 对照 IDEA Community 的 KeymapPanel 和新版 ActionsTree 渲染器,收紧分类树与操作行的高度、缩小工具栏间距,并调整展开、折叠、编辑和齿轮图标。
  • 移除每个普通操作重复出现的闪电图标;快捷键在行右侧以独立键帽显示,选中行保持整行高亮。
  • 不再在每行常驻「+」和「×」;点击键帽可编辑,工具栏编辑菜单或右键菜单可新增、删除和恢复默认。工具栏菜单也提供键盘辅助功能可访问的删除入口。
  • 当前分支的 macOS 名称仍只读;三套可切换预设属于独立草稿 PR feat(macOS): 支持三套可切换的快捷键预设 #946,未复制到本 PR。
  • 验证:实际启动本分支预览检查树形行、键帽、图标与工具栏菜单;./scripts/test-macos.sh --filter KeyboardShortcutTests --no-parallel(19 项通过)、./scripts/verify-service-boundaries.sh、功能矩阵及变更门禁、git diff --check 均通过。验证用预览已关闭。

快捷键页图标与搜索框修正

  • 使用 IDEA 社区版公开的 expandAll、collapseAll、edit、chevronRight、search 及对应暗色 SVG。工具栏图标和搜索图标保留资源原色,避免 SwiftUI 模板着色改变原本的明暗对比;笔画形状和粗细由 IDEA SVG 本身决定。
  • 快捷键树文件夹改用项目目录树已有的 LitheIcon(.folder) 渲染入口;顶部齿轮改用仓库现有的 IDEA 图标映射。搜索框继续复用共享设置控件的边框与底色,不添加局部覆盖;快捷键页移除搜索占位文字并保留辅助功能标签。
  • 依据:IDEA KeymapPanel、IDEA ExpUI 图标资源。
  • 验证:./scripts/test-macos.sh --filter KeyboardShortcutTests --no-parallel(19 项通过)、./scripts/verify-service-boundaries.sh、./scripts/verify-runtime-bundle-immutability.sh、功能矩阵及变更门禁、git diff --check 均通过;新增 SVG 已解析检查。修正后的真实窗口视觉复查尚未完成,因为当前运行的 Lithe 是另一工作树的预览实例。

全 App 文字按钮按下态

  • 将 macOS App 中使用系统 .plain、.borderless 的 238 处按钮统一接入共享 LitheNoPressButtonStyle。点击文字或图标时不再由系统短暂降低标签亮度;按钮原有的选中状态及显式定义的背景反馈保持不变。
  • 原有目录树无按下变暗样式复用为通用样式,没有增加第二套重复实现。检查 macos/Sources/Lithe,已无旧 .plain、.borderless 按钮样式引用。
  • 验证:Swift 应用编译及 ./scripts/test-macos.sh --filter KeyboardShortcutTests --no-parallel(19 项通过)、./scripts/verify-service-boundaries.sh、./scripts/verify-runtime-bundle-immutability.sh、功能矩阵及变更门禁、git diff --check 均通过。实际按下态视觉复查仍待在本分支预览中完成。

快捷键预设旁齿轮按钮

  • 隐藏 macOS Menu 在齿轮旁自动绘制的下拉箭头,保留齿轮和“Restore All Defaults”菜单。
  • 在本分支实际预览中确认箭头已消失,点击齿轮仍打开菜单;验证用预览已关闭。
  • ./scripts/test-macos.sh --filter KeyboardShortcutTests --no-parallel(19 项通过)、服务边界、运行时程序包只读检查、功能矩阵及变更门禁、git diff --check 均通过。

CI 修复:快捷键右键菜单

  • 将快捷键操作行和快捷键键帽的两处 SwiftUI .contextMenu 改为仓库共享的 .litheContextMenu,保留新增、恢复默认和移除快捷键功能,并统一右键菜单外观。
  • 原先 Swift tests 中唯一失败的是 ContextMenuCoverageTests.contextMenusCannotSilentlyBypassSharedStyle();macOS CI gate 因 Swift tests 失败而连带失败。日志中的 SLOW 行仅是测试耗时排行。
  • 验证:./scripts/test-macos.sh --filter ContextMenuCoverageTests(7 项通过);按 CI 相同筛选条件运行的 macOS Swift 测试(1504 项、181 个 suite 全部通过);服务边界、功能矩阵检查及 git diff --check 通过。

Windows CI 测试时限修复

  • 合入新版 preview 后,Windows 的 Test real JDT on Windows 在 git_workspace_commit_push_checks_submodule_publication_before_updating_the_remote 用例达到默认 15 秒进程上限时将其终止;Windows CI gate 因该作业失败连带报错。该用例在原功能 PR 的 Windows CI 用时 8.3 秒并通过,本次失败报告明确记录为 timeout,没有断言失败。
  • 仅为该真实 Git 子模块发布测试配置 30 秒有界预算,同步 CI 和本地 PowerShell 测试入口;其他测试仍使用默认 15 秒预算。
  • 本地验证:测试稳定性静态检查、Windows 边界检查、功能矩阵检查及 git diff --check 均通过。Windows 实机结果以本次推送后的 CI 为准。

下拉框重复点击修复

  • 修复设置下拉弹层展开时,再次点击原按钮会先关闭又重新打开的问题。弹层的窗口外点击监听和失焦回调现在会识别原按钮的左键点击,交由按钮自身完成关闭;点击其他下拉框、空白处或右键点击仍按原路径关闭当前弹层。
  • 补充原按钮、其他下拉框位置、空白处及右键点击的事件命中回归测试,并在功能矩阵中补充真实窗口交互验收步骤。
  • 验证:test-stability-macos.sh -- --filter SettingsSelectPopupGeometryTests(4 项通过,新增用例 0.063 秒);测试稳定性静态检查、服务边界、运行时程序包只读检查、功能矩阵检查及变更门禁、git diff --check 均通过。尚未在真实设置窗口中逐项点击复查,功能矩阵维持待验证。

与最新 preview 的冲突处理

  • 合入 preview 的多套快捷键预设、欢迎页新布局及工作台更新;快捷键页保留本 PR 的分类树、工具栏、齿轮样式,并接入 macOS、IntelliJ IDEA Classic、Eclipse 预设选择。切换预设时清除正在编辑及已选中的命令。
  • 欢迎页和工作台继续使用本 PR 的共享无按下变暗按钮样式,避免合并后恢复系统 .plain 按下效果。
  • 合并功能矩阵中快捷键页的树形操作与多预设验收步骤,再从 JSON 重新生成 Markdown、CSV。六个冲突文件已解决,GitHub 显示 PR 可合并。
  • 本地验证:相关 macOS Swift 测试 37 项通过;Agent Notes、测试稳定性静态检查、服务边界、程序包只读、功能矩阵及变更门禁、git diff --check 均通过。远程 CI 仍在运行。

下拉弹层原生事件回归测试

  • 原审查意见标记为 Outdated;8d4022cf 已修复原按钮点击时的提前关闭与重新打开。本次新增在 AppKit 窗口中向两个实际 LitheSettingsSelect 发送鼠标按下/抬起事件的回归测试,验证再次点击原按钮收起、点击另一个下拉框切换弹层、点击空白处关闭弹层。
  • 测试窗口和残留弹层在结束时清理,等待使用有界截止时间。test-stability-macos.sh -- --filter SettingsSelectPopupGeometryTests:5 项通过,新增原生事件用例约 0.116 秒;测试稳定性静态检查、服务边界、程序包只读、功能矩阵及变更门禁、git diff --check 通过。
  • 这项测试覆盖真实 AppKit 事件顺序;完整设置窗口的视觉复查仍按功能矩阵保持待验证。

审查补充:辅助功能与矩阵清理

  • 为快捷键页工具栏的“全部展开”“全部折叠”“编辑快捷键”三个纯图标控件补充明确的辅助功能标签,避免 VoiceOver 只读出泛化按钮语义。
  • 清理应用设置功能矩阵中重复的下拉弹层验收步骤,并同步更新 shared/platform-feature-matrix.json、Markdown 与 CSV 生成视图。

@ghfind-review ghfind-review Bot added the review: medium ghfind author score; see https://ghfind.com label Sep 28, 2026
@arkleselect arkleselect changed the title style(macos): align settings panels and controls with IntelliJ UI 优化 macOS 设置窗口界面与控件样式 Sep 28, 2026
@arkleselect arkleselect changed the title 优化 macOS 设置窗口界面与控件样式 优化 macOS 设置窗口布局、控件样式与中文显示 Sep 28, 2026
@arkleselect arkleselect changed the title 优化 macOS 设置窗口布局、控件样式与中文显示 优化 macOS 设置窗口布局、控件及全局按钮样式 Sep 28, 2026
@arkleselect
arkleselect marked this pull request as ready for review September 28, 2026 05:39

@1lck 1lck left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

按 lithe-code-review 对当前 head c6872e5de5b379aa922396417298aea5ade1da76 完成代码审查。未发现需要阻塞合并的问题;有 1 个 P2 建议:新下拉弹层的外部点击监听与原按钮 toggle 会处理同一次点击,造成关闭后重开,详见行内意见。

验证:本地 diff、程序包只读、功能矩阵,以及 macOS/Windows 测试稳定性静态检查通过。此次未运行 macOS 原生界面或完整测试;服务边界脚本因 Linux 缺少 PlistBuddy 未完整执行。下面的事件顺序问题来自静态调用链分析。

Comment thread macos/Sources/Lithe/Views/Components/LitheSettingsControls.swift Outdated
@xiaoyumuxi

Copy link
Copy Markdown
Collaborator
  1. 快捷键页工具栏的辅助功能标签不完整。 KeyboardShortcutSettingsView.swift 里的“全部展开 / 全部折叠 / 编辑”都是纯 LitheIDEAIcon 按钮,目前只有 .help(...),没有像齿轮按钮那样设置 .accessibilityLabel(...)。而 LitheIDEAIcon 本身也没有提供语义标签。VoiceOver 下很可能只能读成泛化的“button/menu button”。建议给这三个控件明确补 accessibilityLabel。这个我会算 P2/P3 之间,非合并阻塞,但应该顺手修掉。

  2. 功能矩阵的验收描述重复。 shared/platform-feature-matrix.json 的 application-settings.verification 中,“再次点击原下拉按钮……缩小可用屏幕高度……”这一组步骤连续出现了两遍;生成出来的 CSV/Markdown 也跟着重复。不会影响功能,但明显是合并冲突后的文档残留。

@1lck 可以合入了,这个我帮忙修复了一下来着

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

review: medium ghfind author score; see https://ghfind.com

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants