Skip to content

[6219] 最近使用菜单加宽至360并新增底部打开文件入口 - #4736

Open
MoonL79 wants to merge 1 commit into
mainfrom
da/6219/go_menu_widen_open_file
Open

MoonL79 wants to merge 1 commit into
mainfrom
da/6219/go_menu_widen_open_file

Conversation

@MoonL79

@MoonL79 MoonL79 commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

任务简述

针对最近使用菜单过窄导致长文件名截断过多、以及缺乏直接打开本地文件入口的问题,完成最近使用菜单加宽与底部文件浏览器打开入口的开发,并修复了打开文件时 QML 弹层被提前销毁导致的崩溃。

改动内容

  1. GoMenu.qml:

    • 菜单宽度 menuWidth 由 260 调整至 360 逻辑像素(乘 Theme.scaleFactor),长文件名可见字符显著增多;
    • 底部新增固定操作区 footerArea(含分隔细线与「打开文件…」菜单项),Flickable 底部改锚定至 footerArea.top,确保列表滚动时入口仍固定在底部;
    • 新增 FolderIcon 文件夹图标组件,MenuItem 支持 action 模式(隐藏类型标签、展示文件夹图标),图标经统一 Loader 加载;
    • 点击「打开文件…」触发 goBridge.openFile()。
  2. GoMenuBridge (C++):

    • loadMeta 按 label_ 前缀通用解析文案字段(默认兜底 qt_translate);
    • 新增 Q_INVOKABLE void openFile():先 hide() 隐藏菜单,再以主窗口为父弹出系统 QFileDialog::getOpenFileName,过滤器限定 Documents (*.pdf *.tmu *.stem);;PDF (*.pdf);;TeXmacs (*.tmu);;STEM (*.stem);对话框返回后选中文件经 loadBuffer(file) 复用既有 (go-menu-load-buffer ...) 链路打开,取消则 closeMenu();
    • 宿主改用 QPointer<QWidget> 跟踪生命周期;
    • 包含 MOGAN_TEST_OPEN_FILE 环境变量钩子(cancel / event-loop-cancel / 预设路径)以便自动化测试。
  3. 崩溃修复(SIGABRT @ QQmlData::destroyed):

    • 根因:菜单宿主设置了 WA_DeleteOnClose,初版 openFile() 在弹原生对话框前先 closeMenu(),对话框的嵌套事件循环会处理 DeferredDelete,使 QQuickWidget/QML 项在 goBridge.openFile() 的 QML 回调仍在调用栈时被销毁;
    • 修复:对话框运行期间仅隐藏菜单,返回后才关闭,保证 QML 回调退出前对象存活。
  4. Scheme 与翻译:

    • file-menu.scm:go-menu-meta 增加 (cons "label_open" (translate "Open file"));
    • zh_CN.scm:增加 ("Open file" "打开文件")。
  5. 单元测试:

    • go-menu-test.scm:增加 label_open 字段存在性断言;
    • go_menu_bridge_test.cpp:默认 meta 含 label_open、openFile 调用,及 event-loop-cancel 生命周期回归用例(验证嵌套事件循环返回前菜单存活、返回后可正常延迟销毁);
    • qml_load_test.cpp:GoMenuStubBridge 增加 label_open/openFile 桩,断言 menuWidth 360 与恰好一个 goMenuOpenItem。

验证

  • xmake r go-menu-test:5 correct, 0 failed
  • xmake r go_menu_bridge_test:5 passed, 0 failed
  • xmake r qml_load_test:38 passed, 0 failed
  • gf fmt --changed-since=main + 全量 gf fmt --check:通过

🤖 Generated with Claude Code

Co-Authored-By: Claude Code <noreply@anthropic.com>
@PinkMagicFly
PinkMagicFly force-pushed the da/6219/go_menu_widen_open_file branch from f87deff to a073829 Compare October 16, 2026 11:05

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant