Do not init Menu lazily, otherwise empty menus would be invalid.
This commit is contained in:
parent
541b855512
commit
2f5dfb1dc7
1 changed files with 19 additions and 20 deletions
|
@ -26,6 +26,25 @@ generateGroupId = (items, pos) ->
|
||||||
Menu = bindings.Menu
|
Menu = bindings.Menu
|
||||||
Menu::__proto__ = EventEmitter.prototype
|
Menu::__proto__ = EventEmitter.prototype
|
||||||
|
|
||||||
|
Menu::_init = ->
|
||||||
|
@commandsMap = {}
|
||||||
|
@groupsMap = {}
|
||||||
|
@items = []
|
||||||
|
@delegate =
|
||||||
|
isCommandIdChecked: (commandId) => @commandsMap[commandId]?.checked
|
||||||
|
isCommandIdEnabled: (commandId) => @commandsMap[commandId]?.enabled
|
||||||
|
isCommandIdVisible: (commandId) => @commandsMap[commandId]?.visible
|
||||||
|
getAcceleratorForCommandId: (commandId) => @commandsMap[commandId]?.accelerator
|
||||||
|
executeCommand: (commandId) => @commandsMap[commandId]?.click()
|
||||||
|
menuWillShow: =>
|
||||||
|
# Make sure radio groups have at least one menu item seleted.
|
||||||
|
for id, group of @groupsMap
|
||||||
|
checked = false
|
||||||
|
for radioItem in group when radioItem.checked
|
||||||
|
checked = true
|
||||||
|
break
|
||||||
|
v8Util.setHiddenValue group[0], 'checked', true unless checked
|
||||||
|
|
||||||
Menu::popup = (window) ->
|
Menu::popup = (window) ->
|
||||||
throw new TypeError('Invalid window') unless window?.constructor is BrowserWindow
|
throw new TypeError('Invalid window') unless window?.constructor is BrowserWindow
|
||||||
@_popup window
|
@_popup window
|
||||||
|
@ -36,26 +55,6 @@ Menu::append = (item) ->
|
||||||
Menu::insert = (pos, item) ->
|
Menu::insert = (pos, item) ->
|
||||||
throw new TypeError('Invalid item') unless item?.constructor is MenuItem
|
throw new TypeError('Invalid item') unless item?.constructor is MenuItem
|
||||||
|
|
||||||
# Create delegate.
|
|
||||||
unless @delegate?
|
|
||||||
@commandsMap = {}
|
|
||||||
@groupsMap = {}
|
|
||||||
@items = []
|
|
||||||
@delegate =
|
|
||||||
isCommandIdChecked: (commandId) => @commandsMap[commandId]?.checked
|
|
||||||
isCommandIdEnabled: (commandId) => @commandsMap[commandId]?.enabled
|
|
||||||
isCommandIdVisible: (commandId) => @commandsMap[commandId]?.visible
|
|
||||||
getAcceleratorForCommandId: (commandId) => @commandsMap[commandId]?.accelerator
|
|
||||||
executeCommand: (commandId) => @commandsMap[commandId]?.click()
|
|
||||||
menuWillShow: =>
|
|
||||||
# Make sure radio groups have at least one menu item seleted.
|
|
||||||
for id, group of @groupsMap
|
|
||||||
checked = false
|
|
||||||
for radioItem in group when radioItem.checked
|
|
||||||
checked = true
|
|
||||||
break
|
|
||||||
v8Util.setHiddenValue group[0], 'checked', true unless checked
|
|
||||||
|
|
||||||
switch item.type
|
switch item.type
|
||||||
when 'normal' then @insertItem pos, item.commandId, item.label
|
when 'normal' then @insertItem pos, item.commandId, item.label
|
||||||
when 'checkbox' then @insertCheckItem pos, item.commandId, item.label
|
when 'checkbox' then @insertCheckItem pos, item.commandId, item.label
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue