Skip to content

Commit 67ef4d7

Browse files
committed
🐞 fix: 修复mac快捷键关闭窗口报错的问题
1 parent 386db73 commit 67ef4d7

File tree

2 files changed

+36
-3
lines changed

2 files changed

+36
-3
lines changed

src/main/index.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { initializeRemoteControl } from './modules/remoteControl';
1212
import { initializeShortcuts, registerShortcuts } from './modules/shortcuts';
1313
import { initializeTray, updateCurrentSong, updatePlayState, updateTrayMenu } from './modules/tray';
1414
import { setupUpdateHandlers } from './modules/update';
15-
import { createMainWindow, initializeWindowManager } from './modules/window';
15+
import { createMainWindow, initializeWindowManager, setAppQuitting } from './modules/window';
1616
import { startMusicApi } from './server';
1717
import { initWindowSizeManager } from './modules/window-size';
1818

@@ -137,6 +137,12 @@ if (!isSingleInstance) {
137137
}
138138
});
139139

140+
// 应用即将退出时的处理
141+
app.on('before-quit', () => {
142+
// 设置退出标志
143+
setAppQuitting(true);
144+
});
145+
140146
// 重启应用
141147
ipcMain.on('restart', () => {
142148
app.relaunch();

src/main/modules/window.ts

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ const store = new Store();
2121
// 保存主窗口引用,以便在 activate 事件中使用
2222
let mainWindowInstance: BrowserWindow | null = null;
2323
let isPlaying = false;
24+
let isAppQuitting = false;
2425
// 保存迷你模式前的窗口状态
2526
let preMiniModeState: WindowState = {
2627
width: DEFAULT_MAIN_WIDTH,
@@ -30,6 +31,13 @@ let preMiniModeState: WindowState = {
3031
isMaximized: false
3132
};
3233

34+
/**
35+
* 设置应用退出状态
36+
*/
37+
export function setAppQuitting(quitting: boolean) {
38+
isAppQuitting = quitting;
39+
}
40+
3341
/**
3442
* 初始化代理设置
3543
*/
@@ -117,8 +125,13 @@ export function initializeWindowManager() {
117125
ipcMain.on('close-window', (event) => {
118126
const win = BrowserWindow.fromWebContents(event.sender);
119127
if (win) {
120-
win.destroy();
121-
app.quit();
128+
// 在 macOS 上,关闭窗口不应该退出应用,而是隐藏窗口
129+
if (process.platform === 'darwin') {
130+
win.hide();
131+
} else {
132+
win.destroy();
133+
app.quit();
134+
}
122135
}
123136
});
124137

@@ -294,6 +307,20 @@ export function createMainWindow(icon: Electron.NativeImage): BrowserWindow {
294307
setThumbarButtons(mainWindow);
295308
});
296309

310+
// 处理窗口关闭事件
311+
mainWindow.on('close', (event) => {
312+
// 在 macOS 上,阻止默认的关闭行为,改为隐藏窗口
313+
if (process.platform === 'darwin') {
314+
// 检查是否是应用正在退出
315+
if (!isAppQuitting) {
316+
event.preventDefault();
317+
mainWindow.hide();
318+
return;
319+
}
320+
}
321+
// 在其他平台上,或者应用正在退出时,允许正常关闭
322+
});
323+
297324
mainWindow.on('ready-to-show', () => {
298325
const [width, height] = mainWindow.getSize();
299326
console.log(`窗口显示前的大小: ${width}x${height}`);

0 commit comments

Comments
 (0)