1
1
import { app , Menu , MenuItemConstructorOptions } from 'electron' ;
2
- import { autoHideMenuBar } from "./index"
2
+ import * as ElectronStore from 'electron-store' ;
3
3
4
- const menuTemplate : MenuItemConstructorOptions [ ] = [
5
- {
6
- label : '&Edit' ,
7
- submenu : [
8
- { role : 'undo' } ,
9
- { role : 'redo' } ,
10
- { type : 'separator' } ,
11
- { role : 'cut' , registerAccelerator : false } ,
12
- { role : 'copy' , registerAccelerator : false } ,
13
- { role : 'paste' , registerAccelerator : false } ,
14
- { role : 'pasteAndMatchStyle' , registerAccelerator : false } ,
15
- { role : 'delete' } ,
16
- { role : 'selectAll' }
17
- ]
18
- } ,
19
- {
20
- label : '&View' ,
21
- submenu : [
22
- { role : 'resetZoom' } ,
23
- { role : 'zoomIn' } ,
24
- { role : 'zoomOut' } ,
25
- { type : 'separator' } ,
26
- { role : 'togglefullscreen' } ,
27
- { type : 'separator' } ,
28
- { role : 'reload' } ,
29
- { role : 'forceReload' } ,
30
- { role : 'toggleDevTools' } ,
31
- { type : 'checkbox' , 'label' : 'Toggle Menu Bar' , click ( event ) {
32
- autoHideMenuBar ( event . checked || false )
33
- } }
34
- ]
35
- } ,
36
- {
37
- label : '&Window' ,
38
- role : 'window' ,
39
- submenu : [
40
- { role : 'minimize' } ,
41
- { role : 'close' }
42
- ]
43
- } ,
44
- {
45
- label : '&Help' ,
46
- role : 'help' ,
47
- submenu : [
48
- {
49
- label : 'Learn More' ,
50
- click ( ) { require ( 'electron' ) . shell . openExternal ( 'https://httptoolkit.tech' ) }
51
- }
52
- ]
53
- }
54
- ] ;
4
+ const store = new ElectronStore ( ) ;
5
+ const AUTO_HIDE_SETTING_KEY = "autoHideMenuBar" ;
55
6
56
- if ( process . platform === 'darwin' ) {
57
- const macMenu : MenuItemConstructorOptions = {
58
- label : app . getName ( ) ,
59
- submenu : [
60
- { role : 'about' } ,
61
- { type : 'separator' } ,
62
- { role : 'services' } ,
63
- { type : 'separator' } ,
64
- { role : 'hide' } ,
65
- { role : 'hideOthers' } ,
66
- { role : 'unhide' } ,
67
- { type : 'separator' } ,
68
- { role : 'quit' }
69
- ]
70
- } ;
71
- menuTemplate . unshift ( macMenu ) ;
7
+ export const shouldAutoHideMenu = ( ) => ! ! store . get ( AUTO_HIDE_SETTING_KEY ) ;
72
8
73
- // Add to Edit menu
74
- ( menuTemplate [ 1 ] . submenu as MenuItemConstructorOptions [ ] ) . push (
75
- { type : 'separator' } ,
9
+ export const getMenu = ( browserWindows : Electron . BrowserWindow [ ] ) => {
10
+ const menuTemplate : MenuItemConstructorOptions [ ] = [
11
+ {
12
+ label : '&Edit' ,
13
+ submenu : [
14
+ { role : 'undo' } ,
15
+ { role : 'redo' } ,
16
+ { type : 'separator' } ,
17
+ { role : 'cut' , registerAccelerator : false } ,
18
+ { role : 'copy' , registerAccelerator : false } ,
19
+ { role : 'paste' , registerAccelerator : false } ,
20
+ { role : 'pasteAndMatchStyle' , registerAccelerator : false } ,
21
+ { role : 'delete' } ,
22
+ { role : 'selectAll' }
23
+ ]
24
+ } ,
76
25
{
77
- label : 'Speech ' ,
26
+ label : '&View ' ,
78
27
submenu : [
79
- { role : 'startSpeaking' } ,
80
- { role : 'stopSpeaking' }
28
+ { role : 'resetZoom' } ,
29
+ { role : 'zoomIn' } ,
30
+ { role : 'zoomOut' } ,
31
+ { type : 'separator' } ,
32
+ { role : 'togglefullscreen' } ,
33
+ { type : 'separator' } ,
34
+ { role : 'reload' } ,
35
+ { role : 'forceReload' } ,
36
+ { role : 'toggleDevTools' }
37
+ ]
38
+ } ,
39
+ {
40
+ label : '&Window' ,
41
+ role : 'window' ,
42
+ submenu : [
43
+ { role : 'minimize' } ,
44
+ { role : 'close' }
45
+ ]
46
+ } ,
47
+ {
48
+ label : '&Help' ,
49
+ role : 'help' ,
50
+ submenu : [
51
+ {
52
+ label : 'Learn More' ,
53
+ click ( ) { require ( 'electron' ) . shell . openExternal ( 'https://httptoolkit.tech' ) }
54
+ }
81
55
]
82
56
}
83
- ) ;
84
-
85
- // Window menu
86
- menuTemplate [ 3 ] . submenu = [
87
- { role : 'close' } ,
88
- { role : 'minimize' } ,
89
- { role : 'zoom' } ,
90
- { type : 'separator' } ,
91
- { role : 'front' }
92
57
] ;
93
- } else {
94
- menuTemplate . unshift ( {
95
- label : '&File' ,
96
- submenu : [
58
+
59
+ if ( process . platform === 'darwin' ) {
60
+ const macMenu : MenuItemConstructorOptions = {
61
+ label : app . getName ( ) ,
62
+ submenu : [
63
+ { role : 'about' } ,
64
+ { type : 'separator' } ,
65
+ { role : 'services' } ,
66
+ { type : 'separator' } ,
67
+ { role : 'hide' } ,
68
+ { role : 'hideOthers' } ,
69
+ { role : 'unhide' } ,
70
+ { type : 'separator' } ,
71
+ { role : 'quit' }
72
+ ]
73
+ } ;
74
+ menuTemplate . unshift ( macMenu ) ;
75
+
76
+ // Add to Edit menu
77
+ ( menuTemplate [ 1 ] . submenu as MenuItemConstructorOptions [ ] ) . push (
78
+ { type : 'separator' } ,
97
79
{
98
- // This should close the Window, but look like Quit. End behaviour is that every
99
- // Window _acts_ like a separate process, but is really a separate window.
100
- // (This lets us easily share a single server instance)
101
- role : 'close' ,
102
- label : 'Quit' ,
103
- accelerator : 'CommandOrControl+Q'
80
+ label : 'Speech' ,
81
+ submenu : [
82
+ { role : 'startSpeaking' } ,
83
+ { role : 'stopSpeaking' }
84
+ ]
104
85
}
105
- ]
106
- } ) ;
107
- }
86
+ ) ;
87
+
88
+ // Window menu
89
+ menuTemplate [ 3 ] . submenu = [
90
+ { role : 'close' } ,
91
+ { role : 'minimize' } ,
92
+ { role : 'zoom' } ,
93
+ { type : 'separator' } ,
94
+ { role : 'front' }
95
+ ] ;
96
+ } else {
97
+ menuTemplate . unshift ( {
98
+ label : '&File' ,
99
+ submenu : [
100
+ {
101
+ // This should close the Window, but look like Quit. End behaviour is that every
102
+ // Window _acts_ like a separate process, but is really a separate window.
103
+ // (This lets us easily share a single server instance)
104
+ role : 'close' ,
105
+ label : 'Quit' ,
106
+ accelerator : 'CommandOrControl+Q'
107
+ }
108
+ ]
109
+ } ) ;
110
+
111
+ // On Windows & Linux, it's possible to autohide the menu bar:
112
+ ( menuTemplate [ 2 ] . submenu as MenuItemConstructorOptions [ ] ) . push ( {
113
+ type : 'checkbox' ,
114
+ label : 'Autohide Menu Bar' ,
115
+ checked : shouldAutoHideMenu ( ) ,
116
+ click : ( event ) => {
117
+ const shouldAutoHide = event . checked || false ;
118
+ browserWindows . forEach ( ( window ) => {
119
+ window . setAutoHideMenuBar ( shouldAutoHide ) ;
120
+ window . setMenuBarVisibility ( ! shouldAutoHide ) ;
121
+ } ) ;
122
+ store . set ( { [ AUTO_HIDE_SETTING_KEY ] : shouldAutoHide } ) ;
123
+ }
124
+ } )
125
+ }
108
126
109
- export const menu = Menu . buildFromTemplate ( menuTemplate ) ;
127
+ return Menu . buildFromTemplate ( menuTemplate ) ;
128
+ }
0 commit comments