From d4a148ea52a4ba0fe2b7dadb96b55411517f6d29 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Wed, 14 Aug 2013 12:03:37 +0800 Subject: [PATCH] The Menu object should store items by its index. --- browser/api/lib/menu.coffee | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/browser/api/lib/menu.coffee b/browser/api/lib/menu.coffee index d666b2cab622..d4d2dafbf2a8 100644 --- a/browser/api/lib/menu.coffee +++ b/browser/api/lib/menu.coffee @@ -1,5 +1,6 @@ -EventEmitter = require('events').EventEmitter BrowserWindow = require 'browser-window' +EventEmitter = require('events').EventEmitter +IDWeakMap = require 'id-weak-map' MenuItem = require 'menu-item' bindings = process.atomBinding 'menu' @@ -28,15 +29,17 @@ Menu::insert = (pos, item) -> @setSublabel pos, item.sublabel if item.sublabel? - unless @items? - @items = {} + unless @delegate? + @commandsMap = {} + @items = [] @delegate = - isCommandIdChecked: (commandId) => @items[commandId]?.checked - isCommandIdEnabled: (commandId) => @items[commandId]?.enabled - isCommandIdVisible: (commandId) => @items[commandId]?.visible - getAcceleratorForCommandId: (commandId) => @items[commandId]?.accelerator - executeCommand: (commandId) => @items[commandId]?.click() - @items[item.commandId] = item + 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() + @items.splice pos, 0, item + @commandsMap[item.commandId] = item Menu.setApplicationMenu = (menu) -> throw new TypeError('Invalid menu') unless menu?.constructor is Menu