Skip to content

feat(desktop): 侧栏按钮可以隐藏,隐藏的工具窗口列在“…”按钮里 - #1901

Merged
xiaoyumuxi merged 1 commit into
previewfrom
feat/desktop-hide-stripe-entries
Nov 14, 2026
Merged

xiaoyumuxi merged 1 commit into
previewfrom
feat/desktop-hide-stripe-entries

Conversation

@xiaoyumuxi

Copy link
Copy Markdown
Collaborator

关联 Issue / Linked issue

PR 类型 / Type

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

改动说明 / What changes

背景 / Why

Viva 桌面端的侧栏按钮可以拖动和移动,但没法隐藏。旧客户端(#1677)和 IDEA 都允许把不用的工具窗口按钮从侧栏收起,并在侧栏上留一个“…”按钮,列出被收起的窗口,随时可以找回。这个 PR 在 Viva 桌面端补上:右键隐藏,“…”找回。

改动 / Changes

  • Core 固定版本:scripts/desktop/build-desktop-core.sh 的 PINNED_CORE_REVISION 升到 Lithe-core-rust#34 的合并提交 1d4556b。
  • Go 绑定(internal/core/chrome.go):
    • ChromeLayout 新增 Hidden,空时编码成 []。
    • 新增 SetChromeHidden(id, hidden) 和对应的精确 JSON 形状。
    • core_test.go 覆盖编码、隐藏后关闭窗口、保留位置、取消隐藏,以及拒绝隐藏标题栏按钮。
  • 隐藏入口(chrome_view.go stripeButtonMenu):
    • 侧栏按钮的右键菜单新增“隐藏入口”,位置在“隐藏工具窗口”之后、“移动到”之前。
    • 隐藏背景图按钮时,它的弹出框一起关闭(app.go hideEntry)。
  • “…”按钮(chrome_view.go hiddenToolWindows):
    • 只在有隐藏按钮时出现,放在左侧栏上方按钮组之后。
    • 尺寸、间距、图标粗细都和 feat(desktop): 工具窗口栏换成 IDEA New UI 图标和尺寸,纯图标按钮悬停显示名称 #1897 之后的侧栏按钮一致:30pt 按钮,间隔 40pt,20pt 图标,Lucide 描边 1.8,即 catalog.go 的 hiddenToolWindowsIcon。
    • 悬停时在右侧提示“工具窗口”;列表打开时不显示这条提示,免得盖住列表。
    • 隐藏按钮的窗口被快捷键打开时,“…”按钮显示成打开状态(主色底),因为这个窗口没有自己的按钮可以显示状态。
  • 隐藏列表(hiddenToolWindowList / hiddenToolWindowRow):
    • 列表在“…”右侧弹出,按布局顺序列出隐藏按钮的图标、名称和快捷键;已打开的行高亮。
    • 左键点一行:恢复按钮并打开窗口,等同于点击该按钮,然后关闭列表。
    • 行的右键菜单“取消隐藏”:只恢复按钮,不动窗口,列表保持打开。最后一个按钮恢复后,“…”和列表一起消失。
    • 快捷键标签取自 tool.<id> 命令,commands.go 把前缀提成常量 toolCommandPrefix。
  • 持久化:隐藏状态随布局保存在 workbench-layout-v2.json,重启后仍然隐藏。
  • 日志:隐藏、从列表打开、取消隐藏三个操作复用已有事件 app.action.performed,动作名分别是 workbench.toolWindow.hideEntry、workbench.toolWindow.showHidden、workbench.toolWindow.unhide。
  • i18n:复用 macOS 已有的 native.hideEntry、native.toolWindows、mac.workbench.unhide,在 messages.json 里给它们加上 desktop 平台,并重新生成 shared.generated.go。
  • 功能矩阵:workbench-tool-window-docking 加上 chrome_view.go 和 chrome_menu_test.go 作为证据,说明补上这一行为;顺便把过时的“未核到组内排序、右键移动”改成已由测试覆盖。
  • 测试(chrome_menu_test.go):
    • TestHiddenStripeButtonIsListedUnderTheEllipsisAndComesBack:
      • 隐藏后按钮从侧栏消失、保留分区,并写入保存的布局。
      • “…”是 30×30,比上一个按钮低 40pt。
      • 悬停时右侧提示“工具窗口”,列表打开后不显示提示。
      • 点行后按钮回到原位、窗口打开,“…”消失。
    • TestUnhidePutsTheButtonBackWithoutTouchingItsToolWindow:
      • 隐藏会关闭窗口。
      • 快捷键打开窗口后,“…”显示成打开状态。
      • 右键“取消隐藏”只恢复按钮,窗口保持打开。
    • TestChromeStateKeepsTheZoneOfAHiddenButton:隐藏按钮的窗口仍在原分区的槽位打开。

不在本 PR 范围内 / Out of scope


类型专属:feat

多平台对齐

  • 两端都具备:Viva 桌面端 macOS 与 Windows 是同一份代码,合入后两端都具备
  • 只实现了 macOS:已为 Windows 提交跟进 Issue:#
  • 只实现了 Windows:已为 macOS 提交跟进 Issue:#
  • 刻意只属于某个平台(功能矩阵中另一端记为 platform-specific),理由:

范围检查 / Scope checks

功能矩阵 / Feature matrix

  • 已更新 shared/platform-feature-matrix/features/workbench-tool-window-docking.json:证据路径和说明;两端验证状态保持 pending,没有做实机验收
  • 已运行 ./scripts/platform-feature-matrix/verify-platform-feature-matrix.sh 和 ./scripts/platform-feature-matrix/verify-platform-feature-matrix-change.sh origin/preview HEAD
  • 没有提交 .artifacts/ 下生成的矩阵视图
  • [N/A] 没有更新矩阵的理由:已更新

统一日志系统 / Structured logging

  • 三个用户操作的终态复用已声明的 app.action.performed(a.performed),没有新增事件、print 或手写事件 ID
  • 一个操作只记一条;Core 拒绝时由已有的 reduceChrome 边界记录一次
  • 只记录动作名和界面来源,不含路径、内容或环境变量
  • [N/A] generate-log-events.mjs --check / verify-log-usage.mjs:仓库里已没有 scripts/logging/,本 PR 也没有新增事件声明

界面文案 / i18n

  • 文案都走共享 i18n:复用已有词条,只在 shared/i18n/messages.json 加上 desktop 平台,运行 node scripts/i18n/generate-i18n.mjs 并提交生成结果
  • 已运行 node scripts/i18n/verify-app-language-localization.mjs 和 node scripts/i18n/generate-i18n.mjs --check,没有放宽脚本或扩大豁免名单

逻辑归属 / Logic placement

  • 隐藏的规则(哪些按钮能隐藏、隐藏关窗口、保留位置、重置恢复)在 Rust Core 的 workbench.chromeLayout.reduce(Lithe-core-rust#34),桌面端只负责菜单、列表和保存
  • [N/A] 没有修改平台层已有的可共享逻辑
  • 没有按工具名加分支;背景图按钮的弹出框随按钮关闭和打开,属于宿主自己的界面状态

性能与内存 / Performance and memory

N/A:没有后台任务、子进程、缓存或 I/O;“…”只在有隐藏按钮时声明,列表只在打开时声明。

设置 / Settings

N/A:没有新增设置项,隐藏状态属于布局。

插件契约 / Plugin contract

N/A:workbench.chromeLayout.reduce 是宿主内部命令,不属于插件契约,没有新增或修改宿主方法与通知。

发行包与资源 / Bundle and resources

  • 没有新增运行时资源;布局仍写在用户数据目录的 workbench-layout-v2.json。已运行 ./scripts/desktop/verify/verify-runtime-bundle-immutability.sh,通过
  • [N/A] 没有新增下载、解压、生成或缓存资源

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

  • 没有产生无用代码;"tool." 前缀提成常量,与快捷键标签共用
  • [N/A] 没有发现需要单独建单的既有债务

验证 / Verification

命令或操作 平台 结果
scripts/desktop/desktop-go.sh test ./... -count=1(LITHE_CORE_RUST_DIR 指向 Lithe-core-rust#35 的 9fa94ce,它包含固定的 1d4556b,只多出构建忽略路径) macOS arm64 54 个包全部通过
scripts/desktop/desktop-go.sh test ./internal/workbench -run 'Hidden|Unhide|Stripe|IconButtons|ChromeState|ToolWindow'(变基到含 #1897 的 preview 后) macOS arm64 通过
无头截图:右键菜单、“…”悬停提示、隐藏列表、行右键菜单,明暗主题 × 中英文共 16 张 macOS arm64 已检查,“…”与侧栏按钮同尺寸、提示在右侧、列表在右侧弹出
node scripts/i18n/generate-i18n.mjs --check macOS 通过
node scripts/i18n/verify-app-language-localization.mjs macOS 通过
node --test scripts/i18n/test-i18n.mjs macOS 41 项通过(第 5 项在机器高负载时卡在 gofmt 子进程上,单独重跑通过)
./scripts/platform-feature-matrix/verify-platform-feature-matrix.sh macOS 通过
./scripts/platform-feature-matrix/verify-platform-feature-matrix-change.sh origin/preview HEAD macOS 通过
./scripts/desktop/verify/verify-runtime-bundle-immutability.sh macOS 通过
Lithe-core-rust#34:cargo test --workspace、clippy -D warnings、fmt --check macOS arm64 通过(在 Core PR 中)

未能执行的检查和原因:

  • Windows:本机没有运行 Windows 版;Viva 桌面端两端代码相同,Windows 实机验收待执行,矩阵保持 pending。
  • macOS 整机验收:只用无头渲染截图和组件测试验证,没有启动打包后的应用逐项点击。

提交前确认 / Final checks

- 侧栏按钮右键菜单新增“隐藏入口”;隐藏会关闭对应工具窗口,按钮保留原来的区域和位置。
- 有隐藏的工具窗口时,左侧栏上方按钮组之后出现“…”按钮,尺寸、间距和图标粗细与侧栏按钮一致,悬停在右侧提示“工具窗口”。
- 点开“…”列出隐藏的窗口和快捷键;左键恢复按钮并打开窗口,右键“取消隐藏”只恢复按钮。
- 隐藏状态由 Core 的 workbench.chromeLayout.reduce(setHidden)计算并随布局保存。
- Core 固定到 Lithe-core-rust#34 的合并提交 1d4556b,它在 #1898 已固定的 #33 之上,没有带进别的 Core 改动。
@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 06:05
@xiaoyumuxi
xiaoyumuxi merged commit 445346b into preview Nov 14, 2026
11 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