From 67ef4d7221d2c5de41ec27c6d941943bad066e5f Mon Sep 17 00:00:00 2001 From: alger Date: Mon, 21 Jul 2025 23:49:21 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9E=20fix:=20=E4=BF=AE=E5=A4=8Dmac?= =?UTF-8?q?=E5=BF=AB=E6=8D=B7=E9=94=AE=E5=85=B3=E9=97=AD=E7=AA=97=E5=8F=A3?= =?UTF-8?q?=E6=8A=A5=E9=94=99=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/index.ts | 8 +++++++- src/main/modules/window.ts | 31 +++++++++++++++++++++++++++++-- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/src/main/index.ts b/src/main/index.ts index d5788e5..0e4f2f7 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -12,7 +12,7 @@ import { initializeRemoteControl } from './modules/remoteControl'; import { initializeShortcuts, registerShortcuts } from './modules/shortcuts'; import { initializeTray, updateCurrentSong, updatePlayState, updateTrayMenu } from './modules/tray'; import { setupUpdateHandlers } from './modules/update'; -import { createMainWindow, initializeWindowManager } from './modules/window'; +import { createMainWindow, initializeWindowManager, setAppQuitting } from './modules/window'; import { startMusicApi } from './server'; import { initWindowSizeManager } from './modules/window-size'; @@ -137,6 +137,12 @@ if (!isSingleInstance) { } }); + // 应用即将退出时的处理 + app.on('before-quit', () => { + // 设置退出标志 + setAppQuitting(true); + }); + // 重启应用 ipcMain.on('restart', () => { app.relaunch(); diff --git a/src/main/modules/window.ts b/src/main/modules/window.ts index 07820a5..66492cb 100644 --- a/src/main/modules/window.ts +++ b/src/main/modules/window.ts @@ -21,6 +21,7 @@ const store = new Store(); // 保存主窗口引用,以便在 activate 事件中使用 let mainWindowInstance: BrowserWindow | null = null; let isPlaying = false; +let isAppQuitting = false; // 保存迷你模式前的窗口状态 let preMiniModeState: WindowState = { width: DEFAULT_MAIN_WIDTH, @@ -30,6 +31,13 @@ let preMiniModeState: WindowState = { isMaximized: false }; +/** + * 设置应用退出状态 + */ +export function setAppQuitting(quitting: boolean) { + isAppQuitting = quitting; +} + /** * 初始化代理设置 */ @@ -117,8 +125,13 @@ export function initializeWindowManager() { ipcMain.on('close-window', (event) => { const win = BrowserWindow.fromWebContents(event.sender); if (win) { - win.destroy(); - app.quit(); + // 在 macOS 上,关闭窗口不应该退出应用,而是隐藏窗口 + if (process.platform === 'darwin') { + win.hide(); + } else { + win.destroy(); + app.quit(); + } } }); @@ -294,6 +307,20 @@ export function createMainWindow(icon: Electron.NativeImage): BrowserWindow { setThumbarButtons(mainWindow); }); + // 处理窗口关闭事件 + mainWindow.on('close', (event) => { + // 在 macOS 上,阻止默认的关闭行为,改为隐藏窗口 + if (process.platform === 'darwin') { + // 检查是否是应用正在退出 + if (!isAppQuitting) { + event.preventDefault(); + mainWindow.hide(); + return; + } + } + // 在其他平台上,或者应用正在退出时,允许正常关闭 + }); + mainWindow.on('ready-to-show', () => { const [width, height] = mainWindow.getSize(); console.log(`窗口显示前的大小: ${width}x${height}`);