From 2f5dfb1dc7c824940b60170bfa05119b931da640 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Tue, 27 May 2014 09:10:54 +0800 Subject: [PATCH] Do not init Menu lazily, otherwise empty menus would be invalid. --- atom/browser/api/lib/menu.coffee | 39 ++++++++++++++++---------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/atom/browser/api/lib/menu.coffee b/atom/browser/api/lib/menu.coffee index 442e54192862..8a4f15380e35 100644 --- a/atom/browser/api/lib/menu.coffee +++ b/atom/browser/api/lib/menu.coffee @@ -26,6 +26,25 @@ generateGroupId = (items, pos) -> Menu = bindings.Menu 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) -> throw new TypeError('Invalid window') unless window?.constructor is BrowserWindow @_popup window @@ -36,26 +55,6 @@ Menu::append = (item) -> Menu::insert = (pos, item) -> 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 when 'normal' then @insertItem pos, item.commandId, item.label when 'checkbox' then @insertCheckItem pos, item.commandId, item.label