Conversation
Greptile Summary本 PR 实现了悬浮工具栏根据选中内容实时切换显示内容的功能,将原先单一的
Confidence Score: 4/5存在一个 P1 逻辑缺陷需在合并前修复:toggle 按钮的勾选状态被强制覆盖,导致视觉反馈与文档实际状态不符。 整体架构设计合理,上下文分发逻辑清晰,原地更新优化有效解决了之前历史线程中提出的性能问题。唯一需要修复的是 prepareTextToolbarButton 中 action->setChecked(action->isCheckable()) 这一行,它导致"Numbered"/"Framed theorems"等 check 按钮的勾选状态始终显示为激活,与 Scheme 侧谓词的计算结果相悖。 src/Plugins/Qt/QTMTextToolbar.cpp 第 48 行需重点关注
|
| Filename | Overview |
|---|---|
| src/Plugins/Qt/QTMTextToolbar.cpp | 新增 updateButtonsFromScheme 实现原地复用按钮的优化路径,并将按钮初始化提取为 prepareTextToolbarButton;但该函数中 action->setChecked(action->isCheckable()) 强制将所有可勾选按钮设为已选中,覆盖了 Scheme 侧计算的正确状态,导致"Numbered"/"Framed theorems"等 check 按钮显示不正确。 |
| TeXmacs/progs/generic/text-toolbar.scm | 核心改动:将 text-toolbar-icons 拆分为 text/math/table/chapter/semantic 五类子工具栏,并实现了 text-toolbar-context 分发逻辑;新增了 selection-tree-modes、selection-content-mode 等模式检测工具函数。 |
| src/Edit/Interface/edit_mouse.cpp | 将 should_show_text_toolbar 中硬编码的四个模式检查统一委托给 Scheme 侧的 text-toolbar-allowed-context?,逻辑简洁且向后兼容。 |
| src/Plugins/Qt/QTMTextToolbar.hpp | 补充了 QAction / QToolButton 头文件引用,声明了 updateButtonsFromScheme 和 prepareTextToolbarButton 两个新方法,变更纯属接口扩展,无问题。 |
| TeXmacs/progs/init-research.scm | 将 text-toolbar 模块的加载移至启动初始化阶段,避免了每次 rebuildButtonsFromScheme 时重复加载。 |
| TeXmacs/misc/themes/liii.css | 为 text-toolbar-button 新增 :checked 和 :checked:hover 状态样式,与亮色主题色调一致。 |
| TeXmacs/misc/themes/liii-night.css | 为暗色主题新增对应的 :checked 状态样式,与亮色主题同步。 |
| TeXmacs/tests/201_63.scm | 测试用例同步扩展,新增图片选区和目录选区不显示工具栏的覆盖场景。 |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[选区变化 / 鼠标抬起] --> B[should_show_text_toolbar]
B --> C{text-toolbar-allowed-context?}
C -- false --> D[隐藏工具栏]
C -- true --> E[showTextToolbar]
E --> F[updateButtonsFromScheme]
F --> G{layout数量与新列表相同?}
G -- 是 --> H[原地更新按钮 in-place]
G -- 否 --> I[clearButtons + 重建]
H --> J[prepareTextToolbarButton]
I --> J
J --> K[⚠️ setChecked 强制=isCheckable]
K --> L[工具栏显示]
Reviews (8): Last reviewed commit: "text-toolbar-chapter-icons支持显示选中态" | Re-trigger Greptile
241275d to
5500de4
Compare
|
|
||
| // Match focus-toolbar semantics: a check-backed toolbar action is rendered | ||
| // selected whenever TeXmacs marks it as checkable. | ||
| action->setChecked (action->isCheckable ()); |
There was a problem hiding this comment.
setChecked 强制覆盖了 Scheme 计算出的正确勾选状态
action->setChecked(action->isCheckable()) 将所有"可勾选"的 action 无条件设为 checked=true,从而覆盖了 TeXmacs Scheme 侧根据实际内容计算出的勾选状态。
受影响场景:
- 无编号章节(
section*等):(numbered-numbered? t)返回#f,对应 action 的isChecked()应为false,但被强制改为true,导致"Numbered"按钮永远显示为已选中。 - 未启用
framed-theorems时:(has-style-package? "framed-theorems")返回#f,但"Framed theorems"按钮仍显示为已激活。 - 章节标题对齐按钮:
(== (safe-init-env var) "left")/"center"等条件均可能被错误覆盖。
正确做法是直接使用 action 在 Scheme 侧已计算好的状态,去掉这一行:
| action->setChecked (action->isCheckable ()); | |
| // button checked state is determined by TeXmacs Scheme side at action creation time |
No description provided.