|
3 | 3 | * |
4 | 4 | * This source code is licensed under the MIT license which is detailed in the LICENSE.txt file. |
5 | 5 | */ |
| 6 | +import electron = require('electron'); |
| 7 | +const Menu = electron.remote.Menu; |
| 8 | +const MenuItem = electron.remote.MenuItem; |
| 9 | + |
6 | 10 | import sourceMapSupport = require('source-map-support'); |
7 | 11 | import _ = require('lodash'); |
8 | 12 | import Logger = require('./logger'); |
@@ -58,6 +62,9 @@ let mainWebUi: MainWebUi = null; |
58 | 62 | * |
59 | 63 | */ |
60 | 64 | export function startUp(): void { |
| 65 | + if (process.platform === "darwin") { |
| 66 | + setupOSXEmptyMenus(); |
| 67 | + } |
61 | 68 |
|
62 | 69 | // Theme control for the window level. |
63 | 70 | const topThemeable: ThemeTypes.Themeable = { |
@@ -137,6 +144,10 @@ export function startUp(): void { |
137 | 144 | mainWebUi.focus(); |
138 | 145 | }); |
139 | 146 |
|
| 147 | + if (process.platform === "darwin") { |
| 148 | + setupOSXMenus(mainWebUi); |
| 149 | + } |
| 150 | + |
140 | 151 | // Detect when the last tab has closed. |
141 | 152 | mainWebUi.addEventListener(MainWebUi.EVENT_TAB_CLOSED, (ev: CustomEvent) => { |
142 | 153 | if (mainWebUi.tabCount === 0) { |
@@ -201,6 +212,58 @@ export function startUp(): void { |
201 | 212 | }); |
202 | 213 | } |
203 | 214 |
|
| 215 | +function setupOSXEmptyMenus(): void { |
| 216 | + const template: GitHubElectron.MenuItemOptions[] = [{ |
| 217 | + label: "Extraterm", |
| 218 | + }]; |
| 219 | + |
| 220 | + const emptyTopMenu = Menu.buildFromTemplate(template); |
| 221 | + Menu.setApplicationMenu(emptyTopMenu); |
| 222 | +} |
| 223 | + |
| 224 | +function setupOSXMenus(mainWebUi: MainWebUi): void { |
| 225 | + const template: GitHubElectron.MenuItemOptions[] = [{ |
| 226 | + label: "Extraterm", |
| 227 | + submenu: [ |
| 228 | + { |
| 229 | + label: 'About Extraterm', |
| 230 | + click(item, focusedWindow) { |
| 231 | + mainWebUi.openAboutTab(); |
| 232 | + }, |
| 233 | + }, |
| 234 | + { |
| 235 | + type: 'separator' |
| 236 | + }, |
| 237 | + { |
| 238 | + label: 'Preferences...', |
| 239 | + click(item, focusedWindow) { |
| 240 | + mainWebUi.openSettingsTab(); |
| 241 | + }, |
| 242 | + }, |
| 243 | + { |
| 244 | + label: 'Key Bindings...', |
| 245 | + click(item, focusedWindow) { |
| 246 | + mainWebUi.openKeyBindingsTab(); |
| 247 | + }, |
| 248 | + }, |
| 249 | + { |
| 250 | + type: 'separator' |
| 251 | + }, |
| 252 | + { |
| 253 | + label: 'Quit', |
| 254 | + click(item, focusedWindow) { |
| 255 | + webipc.windowCloseRequest(); |
| 256 | + }, |
| 257 | + accelerator: 'Command+Q' |
| 258 | + } |
| 259 | + ] |
| 260 | + }]; |
| 261 | + |
| 262 | + const topMenu = Menu.buildFromTemplate(template); |
| 263 | + |
| 264 | + Menu.setApplicationMenu(topMenu); |
| 265 | +} |
| 266 | + |
204 | 267 | function handleConfigMessage(msg: Messages.Message): Promise<void> { |
205 | 268 | const configMessage = <Messages.ConfigMessage> msg; |
206 | 269 | const oldConfiguration = configuration; |
|
0 commit comments