@@ -1032,9 +1032,11 @@ const trayToggleEvtHandler = async () => {
10321032
10331033 // Load app mode setting early (before window creation)
10341034 appMode = ( ( await settings . get ( 'app-mode' ) ) as 'normal' | 'menubar' ) || 'normal' ;
1035- if ( appMode === 'menubar ' ) {
1036- app . dock . hide ( ) ;
1035+ if ( appMode === 'normal ' ) {
1036+ app . setActivationPolicy ( 'regular' ) ;
10371037 }
1038+ // LSUIElement=true in Info.plist starts as accessory (no dock icon).
1039+ // 'regular' adds dock icon + running dot + App Switcher.
10381040
10391041 // Auto-update: check for updates via update.electronjs.org (non-MAS only)
10401042 if ( ! isMAS ( ) ) {
@@ -1292,6 +1294,12 @@ const trayToggleEvtHandler = async () => {
12921294 }
12931295
12941296 tray = new TrayGenerator ( switcherWindow , title , trayToggleEvtHandler ) ;
1297+ tray . getAppMode = ( ) => appMode ;
1298+ tray . onToggleAppMode = ( ) => {
1299+ const newMode = appMode === 'normal' ? 'menubar' : 'normal' ;
1300+ // Reuse the same logic as the IPC handler
1301+ require ( 'electron' ) . ipcMain . emit ( 'set-app-mode' , { } , newMode ) ;
1302+ } ;
12951303
12961304 // https://www.electronjs.org/docs/latest/tutorial/keyboard-shortcuts#global-shortcuts
12971305
@@ -1972,9 +1980,14 @@ ipcMain.on('set-app-mode', async (_event, mode: string) => {
19721980 await settings . set ( 'app-mode' , newMode ) ;
19731981 appMode = newMode ;
19741982 if ( newMode === 'menubar' ) {
1975- app . dock . hide ( ) ;
1983+ app . setActivationPolicy ( 'accessory' ) ;
1984+ // accessory mode hides all windows — re-show after short delay
1985+ const win = getSwitcherWindow ( ) ;
1986+ if ( win ) {
1987+ setTimeout ( ( ) => { win . show ( ) ; win . focus ( ) ; } , 100 ) ;
1988+ }
19761989 } else {
1977- await app . dock . show ( ) ;
1990+ app . setActivationPolicy ( 'regular' ) ;
19781991 }
19791992 // Notify renderer to update drag region
19801993 const window = getSwitcherWindow ( ) ;
@@ -2131,4 +2144,4 @@ ipcMain.handle('detect-active-ide-projects', async () => {
21312144 return Array . from ( folderNames ) ;
21322145} ) ;
21332146
2134- // app.dock.hide () moved to async init block (after settings loaded )
2147+ // Dock visibility managed via app.setActivationPolicy () (see set-app-mode handler )
0 commit comments