2
2
* Copyright (c) 2025 Bytedance, Inc. and its affiliates.
3
3
* SPDX-License-Identifier: Apache-2.0
4
4
*/
5
- import { BrowserWindow , app , ipcMain , screen } from 'electron' ;
5
+ import { BrowserWindow , screen } from 'electron' ;
6
6
7
7
import { logger } from '@main/logger' ;
8
+ import * as env from '@main/env' ;
8
9
9
10
import { createWindow } from './createWindow' ;
10
11
@@ -25,53 +26,23 @@ export function show() {
25
26
}
26
27
27
28
export function createMainWindow ( ) {
28
- ipcMain . removeHandler ( 'minimize-window' ) ;
29
- ipcMain . removeHandler ( 'maximize-window' ) ;
30
- ipcMain . removeHandler ( 'close-window' ) ;
31
-
32
29
mainWindow = createWindow ( {
33
30
routerPath : '/' ,
34
31
width : 430 ,
35
32
height : 580 ,
36
33
alwaysOnTop : false ,
37
34
} ) ;
38
35
39
- ipcMain . handle ( 'minimize-window' , ( ) => {
40
- mainWindow ?. minimize ( ) ;
41
- } ) ;
42
-
43
- ipcMain . handle ( 'maximize-window' , ( ) => {
44
- if ( mainWindow ?. isMaximized ( ) ) {
45
- mainWindow ?. unmaximize ( ) ;
46
- } else {
47
- mainWindow ?. maximize ( ) ;
48
- }
49
- } ) ;
50
-
51
- ipcMain . handle ( 'close-window' , async ( ) => {
52
- if ( mainWindow ) {
53
- mainWindow . close ( ) ;
54
- }
55
- } ) ;
56
-
57
- app . on ( 'activate' , ( ) => {
58
- const windows = BrowserWindow . getAllWindows ( ) ;
59
- const existingWindow = windows . find ( ( win ) => ! win . isDestroyed ( ) ) ;
60
-
61
- if ( ! existingWindow ) {
62
- createMainWindow ( ) ;
36
+ mainWindow . on ( 'close' , ( event ) => {
37
+ logger . info ( 'mainWindow closed' ) ;
38
+ if ( env . isMacOS ) {
39
+ event . preventDefault ( ) ;
40
+ mainWindow ?. hide ( ) ;
63
41
} else {
64
- if ( ! existingWindow . isVisible ( ) ) {
65
- existingWindow . show ( ) ;
66
- }
67
- existingWindow . focus ( ) ;
42
+ mainWindow = null ;
68
43
}
69
44
} ) ;
70
45
71
- mainWindow . on ( 'closed' , ( ) => {
72
- mainWindow = null ;
73
- } ) ;
74
-
75
46
return mainWindow ;
76
47
}
77
48
@@ -111,8 +82,14 @@ export function createSettingsWindow(
111
82
showInBackground,
112
83
} ) ;
113
84
114
- settingsWindow . on ( 'closed' , ( ) => {
115
- settingsWindow = null ;
85
+ settingsWindow . on ( 'close' , ( event ) => {
86
+ if ( env . isMacOS ) {
87
+ event . preventDefault ( ) ;
88
+ settingsWindow ?. hide ( ) ;
89
+ } else {
90
+ settingsWindow = null ;
91
+ }
92
+
116
93
// if mainWindow is not visible, show it
117
94
if ( mainWindow ?. isMinimized ( ) ) {
118
95
mainWindow ?. restore ( ) ;
@@ -131,7 +108,6 @@ export function createSettingsWindow(
131
108
export async function closeSettingsWindow ( ) {
132
109
if ( settingsWindow ) {
133
110
settingsWindow . close ( ) ;
134
- settingsWindow = null ;
135
111
}
136
112
}
137
113
@@ -169,7 +145,9 @@ export async function hideWindowBlock<T>(
169
145
return result ;
170
146
} finally {
171
147
mainWindow ?. setContentProtection ( false ) ;
172
- mainWindow ?. setAlwaysOnTop ( false ) ;
148
+ setTimeout ( ( ) => {
149
+ mainWindow ?. setAlwaysOnTop ( false ) ;
150
+ } , 100 ) ;
173
151
// restore mainWindow
174
152
if ( mainWindow && originalBounds ) {
175
153
mainWindow ?. setBounds ( originalBounds ) ;
0 commit comments