Skip to content

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

Closed

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
  2. 1lck commented on Nov 14, 2026

    @1lck
    Owner

    按维护者本轮清理要求,对照 preview b582e206a6ea2f85aa3a4a8004eab39cbbc2c236 核对后关闭。

    Git Log 分支面板现在直接使用 Viva 的公共 ui.Tree,通过 TreeNode 提供层级、展开和选中状态,并消费树的 Toggled / Chosen 事件。原来的 logTreeRow、drawLogNodes、drawLogRefRow、logRefRows 手写树实现已移除。

    当前公共组件已从当时建议的 desktop/internal/treelist 演进为 Viva ui.Tree;本单针对的第二套手写树维护问题已消除。

    证据:drawLogReferences 与树接线、refNode。

    本次未重新进行 macOS/Windows 原生窗口和视觉验收。

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