From 9c10ec5541b58688bc19c8b2b9e0cf1ed8af9b07 Mon Sep 17 00:00:00 2001 From: hllshiro <40970081+hllshiro@users.noreply.github.com> Date: Thu, 28 Aug 2025 16:59:02 +0800 Subject: [PATCH 1/2] fix: close tab when close window --- src/main/presenter/tabPresenter.ts | 8 ++++++++ src/main/presenter/windowPresenter/index.ts | 1 + src/shared/presenter.d.ts | 1 + 3 files changed, 10 insertions(+) diff --git a/src/main/presenter/tabPresenter.ts b/src/main/presenter/tabPresenter.ts index 4ab291bcd..d3556cc16 100644 --- a/src/main/presenter/tabPresenter.ts +++ b/src/main/presenter/tabPresenter.ts @@ -196,6 +196,14 @@ export class TabPresenter implements ITabPresenter { return await this.destroyTab(tabId) } + /** + * 销毁标签页 + */ + async closeTabs(windowId: number): Promise { + const tabs = this.windowTabs.get(windowId) || [] + tabs.forEach((t) => this.closeTab(t)) + } + /** * 激活标签页 */ diff --git a/src/main/presenter/windowPresenter/index.ts b/src/main/presenter/windowPresenter/index.ts index 89c3c8812..c5f937c4b 100644 --- a/src/main/presenter/windowPresenter/index.ts +++ b/src/main/presenter/windowPresenter/index.ts @@ -794,6 +794,7 @@ export class WindowPresenter implements IWindowPresenter { console.log( `Window ${windowId}: Allowing default close behavior (app is quitting or macOS last window configured to quit).` ) + presenter.tabPresenter.closeTabs(windowId) } } else { // 如果 isQuitting 为 true,表示应用正在主动退出,允许窗口正常关闭 diff --git a/src/shared/presenter.d.ts b/src/shared/presenter.d.ts index ae8b2cfb5..0feff5214 100644 --- a/src/shared/presenter.d.ts +++ b/src/shared/presenter.d.ts @@ -184,6 +184,7 @@ export interface IWindowPresenter { export interface ITabPresenter { createTab(windowId: number, url: string, options?: TabCreateOptions): Promise closeTab(tabId: number): Promise + closeTabs(windowId: number): Promise switchTab(tabId: number): Promise getTab(tabId: number): Promise detachTab(tabId: number): Promise From fb3db12784a4907f47155c80c0d5965d133ee554 Mon Sep 17 00:00:00 2001 From: hllshiro <40970081+hllshiro@users.noreply.github.com> Date: Thu, 28 Aug 2025 17:14:23 +0800 Subject: [PATCH 2/2] fix: Fix mutation-while-iterating and fire-and-forget promises in closeTabs. --- src/main/presenter/tabPresenter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/presenter/tabPresenter.ts b/src/main/presenter/tabPresenter.ts index d3556cc16..cc35a0956 100644 --- a/src/main/presenter/tabPresenter.ts +++ b/src/main/presenter/tabPresenter.ts @@ -200,7 +200,7 @@ export class TabPresenter implements ITabPresenter { * 销毁标签页 */ async closeTabs(windowId: number): Promise { - const tabs = this.windowTabs.get(windowId) || [] + const tabs = [...(this.windowTabs.get(windowId) ?? [])] tabs.forEach((t) => this.closeTab(t)) }