Skip to content

[Feature] Viva Git Log 分支面板改用公共树列表 desktop/internal/treelist #1815

Open

Description

@xiaoyumuxi

Problem to solve / 要解决的问题

Viva 重构 PR #1799 已有公共折叠树列表 desktop/internal/treelist,项目树和 Git Log 提交详情的改动文件都用它绘制行、缩进、展开箭头、选择高亮,并处理方向键导航。Git Log 左侧的分支面板(本地分支、远端、标签)仍是另一套手写树:

  • drawLogSection、drawLogNodes、drawLogRefRow 和 logTreeRow 递归声明行,自己计算缩进,自己画 12px 的箭头。
  • 行的标识是 logRefRows.At(*n),n 是可见行序号,不是稳定键。展开或收起上方的分组后,同一个分支的标识会变,焦点和按下状态会跟着行号而不是分支走。
  • 行的无障碍角色是 RoleButton,不报告 Selected、Expandable、Expanded、Level;treelist 的行报告这些属性。
  • 面板没有键盘处理:logRefRows 只在声明行时出现,不能用方向键移动或展开收起。
  • 选中行只有一种底色,不区分列表是否有键盘焦点;treelist 区分两种。

保留两套实现的代价:树的外观和交互在同一个窗口里不一致;以后修 treelist(例如多选、右键选择)时分支面板不会跟着改,需要再写一遍。

判定依据:在 #1799 分支上全仓库搜索 logTreeRow、drawLogNodes、logRefRows,只有 desktop/internal/workbench/gitlog_view.go 使用;treelist.List 的使用方是 filetree.go 和 gitlog_view.go 的改动文件列表。

Proposed solution / 建议方案

把分支面板改成 treelist.List:

  1. 为分组标题、文件夹和引用分配稳定键(例如按分组种类和 Core ReferenceTreeNode.Path 编号),每帧把可见行投影成 []treelist.Row。
  2. 引用行的图标、颜色和 ahead/behind 文字在 content 回调里画;分组标题和文件夹用 Branch/Expanded。
  3. 用 List.Key 和 List.DoubleClicked 接入键盘和双击;Enter 在引用行上等同单击(切换日志查看的引用)。
  4. 搜索过滤后的平铺结果同样走 treelist,深度为 1。
  5. 删除 logTreeRow、drawLogNodes 中被替代的部分和 logIndent 等只剩它使用的常量。

风险:分支面板的行高、缩进与当前不同,需要对照截图确认;键盘焦点要与提交列表、改动文件列表之间的切换保持一致。引用树结构仍由 Core git.referenceTree(#1753)提供,本项只改界面层。

Target platform / 目标平台

Cross-platform / 跨平台

Area / 模块

Git

Priority / 优先级

P2 / 后续考虑:目前不着急,可安排到后续版本

Alternatives considered / 已考虑的替代方案

只给 logTreeRow 补无障碍属性和键盘处理,改动更小,但仍然保留第二套树,以后 treelist 的改进需要重复实现。

Additional context / 补充信息

Checklist / 提交前检查

  • I searched existing issues for duplicates. / 我已搜索现有 Issue,确认没有重复建议。

Activity

  1. added a commit that references this issue on Nov 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    refactor清理无用代码或重构review: highghfind author score; see https://ghfind.com

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions