Skip to content

fix(desktop): 设置侧栏没有展开箭头的页面图标与分组图标对齐 - #1924

Merged
xiaoyumuxi merged 1 commit into
previewfrom
fix/desktop-settings-sidebar-alignment
Nov 14, 2026
Merged

xiaoyumuxi merged 1 commit into
previewfrom
fix/desktop-settings-sidebar-alignment

Conversation

@xiaoyumuxi

Copy link
Copy Markdown
Collaborator

关联 Issue / Linked issue

PR 类型 / Type

  • feat:新功能或用户可见的改进
  • fix:缺陷修复
  • docs:文档、Agent Note、Skill 等规则文件
  • release:稳定版发布准备

改动说明 / What changes

背景 / Why

设置窗口侧栏里,带展开箭头的分组(外观与行为、工具、AI)和没有箭头的页面(插件、版本控制、构建执行部署、语言与框架、关于)图标不在同一列,后者向左错了 2pt;分组里的子页面(通用、更新……)标题也比分组标题向右错了 2pt。旧版客户端这一列是对齐的。

改动 / Changes

  • desktop/internal/settingswindow/window_view.go navContent:顶层行的图标和标题放进自己的一行,用固定的 tileGap 排列;没有箭头的页面用 PadLeft(chevronSlot) 留出箭头的位置,不再用 chevronSlot - 8 的占位块加上 Tree 行的主题间距去凑。
  • desktop/internal/settingswindow/window.go:新增常量 tileGap = 8,childIndent 改为 chevronSlot + tileSize + tileGap,子页面标题与分组标题从同一处开始;注释写明 chevronSlot 就是 Viva Tree 给自带箭头留的列宽。
  • desktop/internal/settingswindow/window_view_test.go(新增):TestSidebarTilesAndTitlesLineUp 用无界面驱动绘制设置窗口,断言 8 个顶层图标在同一列,子页面和顶层页面标题与分组标题起点相同。

不在本 PR 范围内 / Out of scope

无。


类型专属:fix

复现与根因

  • 复现步骤、实际结果、期望结果:打开设置窗口,看侧栏左侧的彩色图标列。实际:插件、版本控制等没有箭头的页面图标比外观与行为、工具、AI 的图标靠左 2pt,通用等子页面标题比“外观与行为”靠右 2pt。期望:图标在同一列,子页面标题与分组标题对齐。
  • 根因:Epic(0.7.0): 基于 Viva 框架的跨平台方案的迁移(#1794) #1799(0faecba49)。非分组行用宽 chevronSlot - 8 的占位块,图标位置 = 16 + Tree 行间距,默认要求间距是 8;但设置窗口主题用 gfx.DensityCompact,Viva Tree 行间距 Metrics.GapItem 是 6,图标落在 22 而分组行在 24。childIndent 同样按 +8 计算,分组标题实际在 24 + 20 + 6 = 50,子页面标题在 52。
  • 影响平台:macOS、Windows(同一份 Viva 设置窗口代码)。

检查项

  • 已先写回归测试,确认它在修复前失败、修复后通过;测试路径与修复前的失败输出:desktop/internal/settingswindow/window_view_test.go TestSidebarTilesAndTitlesLineUp,修复前:the tiles start at [36 34 34 34 34 36 36 34], want one column
  • [N/A] 无法自动化时,已写明手动复现与验证步骤:已自动化
  • 已搜索被修改函数、类型、契约字段的全部调用方(含另一平台、插件、SDK、脚本和按字符串分发的调用):navContent、chevronSlot、childIndent 只在 settingswindow 包内使用
  • 已检查另一平台是否有同类缺陷(有则本 PR 一并修复,或已提交 Issue):两端共用同一份代码,本 PR 一并修复
  • 只改了修复所需的代码,没有夹带重构;修复过程中发现的其他问题已提交 Issue:无
  • [N/A] 修复改变了行为约束或容易复发,已在 .agents/notes/implemented/bug-fix/ 记录:只是布局常量,回归由测试守住

范围检查 / Scope checks

功能矩阵 / Feature matrix

N/A:没有新增宿主能力,也没有改变跨平台行为,只修正侧栏像素位置。

插件归属 / Plugin ownership

  • 已在仓库根目录运行 develop-lithe 第三节“插件归属与宿主零依赖”的自查命令,结果为空
  • 新增或修改的测试只使用测试内联的合成插件、Core 契约 fixture 或插件市场索引快照;没有读取具体插件的插件包、仓库检出、构建产物或清单,没有使用真实插件 ID,没有“缺少插件时跳过”的测试
  • [N/A] 没有为具体插件提供的能力新建或更新宿主功能矩阵条目;宿主条目的证据和验证动作不引用插件的测试、插件包或插件仓库:未改矩阵
  • [N/A] 插件文案没有写进 shared/i18n/;插件的构建步骤、资源路径和补丁没有写进 scripts/resources/、docs/ci-builds.md、Agent Note 或 Skill:未涉及
  • [N/A] 修改了通用扩展点、可能影响已发布插件的,已在受影响插件的仓库运行它的测试,插件仓库与结果:未改扩展点

统一日志系统 / Structured logging

N/A:没有新增或改动生命周期、操作终态或失败路径。

界面文案 / i18n

  • [N/A] 宿主文案都走共享 i18n:没有新增文案
  • [N/A] 插件提供的文字由插件自己翻译:未涉及
  • 已运行 node scripts/i18n/verify-app-language-localization.mjs 和 node scripts/i18n/generate-i18n.mjs --check,没有放宽脚本或扩大豁免名单

逻辑归属 / Logic placement

N/A:只改界面布局,没有业务逻辑。

性能与内存 / Performance and memory

N/A:每个顶层行多声明一个布局行(共 8 行),不涉及启动、输入、滚动或大文件路径。

设置 / Settings

N/A:没有新增或修改设置项和设置页归属,只改侧栏行内排列。

插件契约 / Plugin contract

N/A:未涉及插件契约和宿主方法。

发行包与资源 / Bundle and resources

N/A:没有新增运行时资源或构建资源。

无用代码与重构 / Dead code and refactoring

  • 本次改动导致变成无用的代码已在本 PR 删除(chevronSlot - 8 占位块已删除)
  • 本次之前就存在的无用代码或可重构之处,已提交带 refactor 标签的 Issue,没有在本 PR 顺手处理:未发现

验证 / Verification

命令或操作 平台 结果
scripts/desktop/desktop-go.sh test ./internal/settingswindow -run TestSidebarTilesAndTitlesLineUp -count=1(修复前) macOS 失败:the tiles start at [36 34 34 34 34 36 36 34], want one column
scripts/desktop/desktop-go.sh test ./internal/settingswindow -count=1 macOS 通过
scripts/desktop/desktop-go.sh vet ./internal/settingswindow、gofmt -l macOS 无输出
.agents/skills/write-stable-tests/scripts/test-stability-macos.sh --package ./internal/settingswindow --filter TestSidebarTilesAndTitlesLineUp macOS 通过
LITHE_VISUAL_OUTPUT_DIR=… desktop-go.sh test -tags 'vivahead lithevisual' ./internal/settingswindow -run 'TestVisualSettings/(20-settings-general-light|35-settings-search-light)',前后截图对比 macOS(无界面渲染) 修复前插件、版本控制、构建、语言、关于图标靠左 2pt;修复后 8 个图标同一列,子页面标题与分组标题对齐
node scripts/i18n/verify-app-language-localization.mjs、node scripts/i18n/generate-i18n.mjs --check macOS 通过
插件归属自查 rg … macOS 结果为空

未能执行的检查和原因: Windows 未在真机上验证(布局代码两端共用,无平台分支);没有启动整机应用,验证用的是生产 Page 的无界面渲染截图,截图未附在 PR 中;暗色主题和英文界面没有单独截图,布局常量与主题和语言无关。

提交前确认 / Final checks

  • 分支从最新的 preview 创建;目标分支:feat、fix、docs 为 preview,release 以发布流程要求为准
  • 以 Draft 提交,本地验证通过后才标记 ready
  • 没有无关改动,没有提交 .build/、target/、dist/、.artifacts/ 等产物,没有凭据、个人路径和未脱敏的日志或截图
  • 本次构建、测试或预览启动的 Lithe 应用和子进程已全部关闭,没有进程残留

设置窗口使用紧凑密度,Tree 行内间距是 6 而不是 8。非分组行用 chevronSlot-8 的占位加行间距对齐图标,
比分组行左移 2pt;分组内子项按 +8 缩进,标题比分组标题右移 2pt。图标和标题改放进自己的行里,
用固定的 tileGap 排列,不再依赖主题间距。
@ghfind-review ghfind-review Bot added the review: high ghfind author score; see https://ghfind.com label Nov 14, 2026
@xiaoyumuxi
xiaoyumuxi marked this pull request as ready for review November 14, 2026 12:59
@lithe-code-review

lithe-code-review Bot commented Nov 14, 2026 •

Copy link
Copy Markdown

Lithe Review

结论: ❓ 审查未完成

已由服务器取消。可以重新评论 @lithe review 召唤。

@xiaoyumuxi
xiaoyumuxi merged commit e097a2a into preview Nov 14, 2026
7 of 12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant