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
|
nextCommandId = 0
|
||||||
|
|
||||||
class MenuItem
|
class MenuItem
|
||||||
|
@ -26,7 +28,7 @@ class MenuItem
|
||||||
@commandId = ++nextCommandId
|
@commandId = ++nextCommandId
|
||||||
@click = =>
|
@click = =>
|
||||||
if typeof click is 'function'
|
if typeof click is 'function'
|
||||||
click.apply this, arguments
|
click this, BrowserWindow.getFocusedWindow()
|
||||||
else if typeof @selector is 'string'
|
else if typeof @selector is 'string'
|
||||||
Menu.sendActionToFirstResponder @selector
|
Menu.sendActionToFirstResponder @selector
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ EventEmitter = require('events').EventEmitter
|
||||||
IDWeakMap = require 'id-weak-map'
|
IDWeakMap = require 'id-weak-map'
|
||||||
MenuItem = require 'menu-item'
|
MenuItem = require 'menu-item'
|
||||||
|
|
||||||
|
app = require 'app'
|
||||||
bindings = process.atomBinding 'menu'
|
bindings = process.atomBinding 'menu'
|
||||||
|
|
||||||
Menu = bindings.Menu
|
Menu = bindings.Menu
|
||||||
|
@ -39,7 +40,7 @@ Menu::insert = (pos, item) ->
|
||||||
getAcceleratorForCommandId: (commandId) => @commandsMap[commandId]?.accelerator
|
getAcceleratorForCommandId: (commandId) => @commandsMap[commandId]?.accelerator
|
||||||
executeCommand: (commandId) =>
|
executeCommand: (commandId) =>
|
||||||
activeItem = @commandsMap[commandId]
|
activeItem = @commandsMap[commandId]
|
||||||
activeItem.click(activeItem) if activeItem?
|
activeItem.click() if activeItem?
|
||||||
@items.splice pos, 0, item
|
@items.splice pos, 0, item
|
||||||
@commandsMap[item.commandId] = item
|
@commandsMap[item.commandId] = item
|
||||||
|
|
||||||
|
@ -47,7 +48,12 @@ applicationMenu = null
|
||||||
Menu.setApplicationMenu = (menu) ->
|
Menu.setApplicationMenu = (menu) ->
|
||||||
throw new TypeError('Invalid menu') unless menu?.constructor is Menu
|
throw new TypeError('Invalid menu') unless menu?.constructor is Menu
|
||||||
applicationMenu = menu # Keep a reference.
|
applicationMenu = menu # Keep a reference.
|
||||||
|
|
||||||
|
if process.platform is 'darwin'
|
||||||
bindings.setApplicationMenu menu
|
bindings.setApplicationMenu menu
|
||||||
|
else
|
||||||
|
windows = app.getBrowserWindows()
|
||||||
|
w.setMenu menu for w in windows
|
||||||
|
|
||||||
Menu.sendActionToFirstResponder = bindings.sendActionToFirstResponder
|
Menu.sendActionToFirstResponder = bindings.sendActionToFirstResponder
|
||||||
|
|
||||||
|
|
40
spec/main.js
40
spec/main.js
|
@ -1,6 +1,7 @@
|
||||||
var app = require('app');
|
var app = require('app');
|
||||||
var ipc = require('ipc');
|
var ipc = require('ipc');
|
||||||
var BrowserWindow = require('browser-window');
|
var BrowserWindow = require('browser-window');
|
||||||
|
var Menu = require('menu');
|
||||||
|
|
||||||
var window = null;
|
var window = null;
|
||||||
|
|
||||||
|
@ -39,6 +40,42 @@ app.on('window-all-closed', function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
app.on('finish-launching', 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.
|
// Test if using protocol module would crash.
|
||||||
require('protocol').registerProtocol('test-if-crashes', function() {});
|
require('protocol').registerProtocol('test-if-crashes', function() {});
|
||||||
|
|
||||||
|
@ -49,4 +86,7 @@ app.on('finish-launching', function() {
|
||||||
height: 600
|
height: 600
|
||||||
});
|
});
|
||||||
window.loadUrl('file://' + __dirname + '/index.html');
|
window.loadUrl('file://' + __dirname + '/index.html');
|
||||||
|
|
||||||
|
var menu = Menu.buildFromTemplate(template);
|
||||||
|
app.setApplicationMenu(menu);
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue