Set application menu would set menu for all windows on Windows.
This commit is contained in:
parent
93f1a3dbd5
commit
1524ced816
3 changed files with 51 additions and 3 deletions
|
@ -1,3 +1,5 @@
|
|||
BrowserWindow = require 'browser-window'
|
||||
|
||||
nextCommandId = 0
|
||||
|
||||
class MenuItem
|
||||
|
@ -26,7 +28,7 @@ class MenuItem
|
|||
@commandId = ++nextCommandId
|
||||
@click = =>
|
||||
if typeof click is 'function'
|
||||
click.apply this, arguments
|
||||
click this, BrowserWindow.getFocusedWindow()
|
||||
else if typeof @selector is 'string'
|
||||
Menu.sendActionToFirstResponder @selector
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@ EventEmitter = require('events').EventEmitter
|
|||
IDWeakMap = require 'id-weak-map'
|
||||
MenuItem = require 'menu-item'
|
||||
|
||||
app = require 'app'
|
||||
bindings = process.atomBinding 'menu'
|
||||
|
||||
Menu = bindings.Menu
|
||||
|
@ -39,7 +40,7 @@ Menu::insert = (pos, item) ->
|
|||
getAcceleratorForCommandId: (commandId) => @commandsMap[commandId]?.accelerator
|
||||
executeCommand: (commandId) =>
|
||||
activeItem = @commandsMap[commandId]
|
||||
activeItem.click(activeItem) if activeItem?
|
||||
activeItem.click() if activeItem?
|
||||
@items.splice pos, 0, item
|
||||
@commandsMap[item.commandId] = item
|
||||
|
||||
|
@ -47,7 +48,12 @@ applicationMenu = null
|
|||
Menu.setApplicationMenu = (menu) ->
|
||||
throw new TypeError('Invalid menu') unless menu?.constructor is Menu
|
||||
applicationMenu = menu # Keep a reference.
|
||||
|
||||
if process.platform is 'darwin'
|
||||
bindings.setApplicationMenu menu
|
||||
else
|
||||
windows = app.getBrowserWindows()
|
||||
w.setMenu menu for w in windows
|
||||
|
||||
Menu.sendActionToFirstResponder = bindings.sendActionToFirstResponder
|
||||
|
||||
|
|
40
spec/main.js
40
spec/main.js
|
@ -1,6 +1,7 @@
|
|||
var app = require('app');
|
||||
var ipc = require('ipc');
|
||||
var BrowserWindow = require('browser-window');
|
||||
var Menu = require('menu');
|
||||
|
||||
var window = null;
|
||||
|
||||
|
@ -39,6 +40,42 @@ app.on('window-all-closed', function() {
|
|||
});
|
||||
|
||||
app.on('finish-launching', function() {
|
||||
var template = [
|
||||
{
|
||||
label: 'File',
|
||||
submenu: [
|
||||
{
|
||||
label: 'Open',
|
||||
accelerator: 'Command+O',
|
||||
},
|
||||
{
|
||||
label: 'Close',
|
||||
accelerator: 'Command+W',
|
||||
click: function(item, window) { window.close(); }
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
label: 'View',
|
||||
submenu: [
|
||||
{
|
||||
label: 'Reload',
|
||||
accelerator: 'Command+R',
|
||||
click: function(item, window) { window.restart(); }
|
||||
},
|
||||
{
|
||||
label: 'Enter Fullscreen',
|
||||
click: function(item, window) { window.setFullScreen(true); }
|
||||
},
|
||||
{
|
||||
label: 'Toggle DevTools',
|
||||
accelerator: 'Alt+Command+I',
|
||||
click: function(item, window) { window.toggleDevTools(); }
|
||||
},
|
||||
]
|
||||
},
|
||||
];
|
||||
|
||||
// Test if using protocol module would crash.
|
||||
require('protocol').registerProtocol('test-if-crashes', function() {});
|
||||
|
||||
|
@ -49,4 +86,7 @@ app.on('finish-launching', function() {
|
|||
height: 600
|
||||
});
|
||||
window.loadUrl('file://' + __dirname + '/index.html');
|
||||
|
||||
var menu = Menu.buildFromTemplate(template);
|
||||
app.setApplicationMenu(menu);
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue