Skip to content

[0977] 修复打开 AI 侧边栏后关闭当前标签页不立即生效 - #4541

Merged
PinkMagicFly merged 2 commits into
mainfrom
pigmagicfly/0977/fix-tab-close-with-chat-sidebar
Sep 11, 2026
Merged

[0977] 修复打开 AI 侧边栏后关闭当前标签页不立即生效#4541
PinkMagicFly merged 2 commits into
mainfrom
pigmagicfly/0977/fix-tab-close-with-chat-sidebar

Conversation

@PinkMagicFly

Copy link
Copy Markdown
Contributor

What

修复:文档中打开 AI 侧边栏后,点击当前文档标签页的关闭按钮,标签页不能立刻关闭,必须点击其他标签页后才消失。

Why(根因)

打开 AI 侧边栏时,sync_chat_sidebar_mode 会调用 focusInput() 把 Qt 焦点交给聊天输入框;聊天输入框是嵌入编辑器(buffer 形如 tmfs://chat/<sid>/input),其 focusInEvent 经 handle_keyboard_focusfocus_on_this_editor 把全局当前视图(the_view)切到该嵌入视图。该嵌入视图的 win_tabpage 为空,且 should_update_menu 对 chat input buffer 只允许重建 ICONS_MODE。

kill_tabpage 原来用 get_current_view_safe() == u 判断「关闭的是否当前标签页」。焦点在聊天输入框时该判断为 false,正在显示的标签被误判成非当前标签:

  1. 跳过 detach/attach——窗口不切换到其他视图,仍显示已删除的编辑器;
  2. 末尾的强制刷新走「当前焦点视图」分支,但聊天输入视图 win_tabpage 为空,条件不满足,tab 栏不重建。

于是已关闭的 tab 仍显示在 tab 栏,直到点击其他标签触发 window-set-view 才消失。

How

src/Texmacs/Data/new_view.cppkill_tabpage

  1. is_current 改为以视图是否附着在窗口上(vw->win != NULL,即正在窗口中显示)判定,不再依赖全局焦点视图。这样焦点在聊天输入框(或其他窗口)时,关闭正在显示的标签页仍会走 detach/attach 分支:window_set_view 切换到本 tabpage 窗口的下一个视图并 set_current_view,其 resume() 触发 update_menus(MENU_ALL) 重建 tab 栏;
  2. 关闭非当前(后台)标签页后的强制刷新,同样不再取全局焦点视图,改为取该 tabpage 窗口实际显示的视图(window_to_view (abstract_window (win_tabpage)))做 suspend/resume,修复「侧边栏焦点下关闭后台标签页 tab 栏也不刷新」的同类问题。

涉及文件

  • src/Texmacs/Data/new_view.cppkill_tabpageis_current 判定与非当前标签刷新目标视图
  • devel/0977.md:任务文档

验证

  • gf fmt --changed-since=main:无需改动;
  • xmake b stem:构建通过。

手工验证(待确认)

GUI 行为待用户手工验证:

  1. 打开两个文档标签页,在其中一个文档中打开 AI 侧边栏(焦点自动进入聊天输入框);
  2. 点击该文档标签页的关闭按钮,标签页应立即关闭并切换到其他标签页;
  3. 再次打开 AI 侧边栏后,关闭一个后台(非当前)标签页,该标签应立即从 tab 栏消失。

🤖 Generated with Claude Code

PinkMagicFly and others added 2 commits September 11, 2026 11:13
kill_tabpage 的「当前标签页」判定从全局焦点视图改为视图是否附着在
窗口上:AI 侧边栏打开时焦点在聊天输入框的嵌入视图
(tmfs://chat/<sid>/input,win_tabpage 为空),按焦点判定会把正在
显示的标签误判成非当前标签,跳过 detach/attach 且 tab 栏不刷新,
导致关闭不立即生效。关闭后台标签后的强制刷新同样改取窗口实际显示
的视图(window_to_view),而非全局焦点视图。

Co-Authored-By: Claude Code <noreply@anthropic.com>

@MoonL79 MoonL79 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@PinkMagicFly
PinkMagicFly merged commit 77d299a into main Sep 11, 2026
6 checks passed
@PinkMagicFly
PinkMagicFly deleted the pigmagicfly/0977/fix-tab-close-with-chat-sidebar branch September 11, 2026 07:50
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.

2 participants