diff --git a/src/menu-manager.coffee b/src/menu-manager.coffee index 18dd49c5a..dbdcb2f0d 100644 --- a/src/menu-manager.coffee +++ b/src/menu-manager.coffee @@ -94,7 +94,7 @@ class MenuManager add: (items) -> items = _.deepClone(items) @merge(@template, item) for item in items - @update() if @initialized + @update() new Disposable => @remove(items) remove: (items) -> @@ -147,6 +147,8 @@ class MenuManager # Public: Refreshes the currently visible menu. update: -> + return unless @initialized + clearImmediate(@pendingUpdateOperation) if @pendingUpdateOperation? @pendingUpdateOperation = setImmediate => diff --git a/src/package-manager.coffee b/src/package-manager.coffee index 4800cad0e..e12f1026d 100644 --- a/src/package-manager.coffee +++ b/src/package-manager.coffee @@ -388,11 +388,11 @@ class PackageManager metadata.repository.url = metadata.repository.url.replace(/(^git\+)|(\.git$)/g, '') options = { - path: pack.rootDirPath, name: packageName, bundledPackage: true, metadata, - packageManager: this, @config, @styleManager, @commandRegistry, - @keymapManager, @devMode, @notificationManager, @grammarRegistry, - @themeManager, @menuManager, @contextMenuManager, @deserializerManager, - @viewRegistry + path: pack.rootDirPath, name: packageName, preloadedPackage: true, + bundledPackage: true, metadata, packageManager: this, @config, + @styleManager, @commandRegistry, @keymapManager, @devMode, + @notificationManager, @grammarRegistry, @themeManager, @menuManager, + @contextMenuManager, @deserializerManager, @viewRegistry } if metadata.theme pack = new ThemePackage(options) diff --git a/src/package.coffee b/src/package.coffee index c96134611..6ffed041d 100644 --- a/src/package.coffee +++ b/src/package.coffee @@ -33,7 +33,7 @@ class Package constructor: (params) -> { - @path, @metadata, @bundledPackage, @packageManager, @config, @styleManager, @commandRegistry, + @path, @metadata, @bundledPackage, @preloadedPackage, @packageManager, @config, @styleManager, @commandRegistry, @keymapManager, @devMode, @notificationManager, @grammarRegistry, @themeManager, @menuManager, @contextMenuManager, @deserializerManager, @viewRegistry } = params @@ -91,6 +91,13 @@ class Package @requireMainModule() @settingsPromise = @loadSettings() + @activationDisposables = new CompositeDisposable + @activateKeymaps() + @activateContextMenus() + @activateMenus() + settings.activate() for settings in @settings + @settingsActivated = true + finishLoading: -> @measure 'loadTime', => @loadStylesheets() @@ -232,39 +239,33 @@ class Package @stylesheetsActivated = true activateResources: -> - @activationDisposables = new CompositeDisposable + @activationDisposables ?= new CompositeDisposable keymapIsDisabled = _.include(@config.get("core.packagesWithKeymapsDisabled") ? [], @name) if keymapIsDisabled @deactivateKeymaps() - else + else unless @preloadedPackage @activateKeymaps() - for [menuPath, map] in @menus when map['context-menu']? - try - itemsBySelector = map['context-menu'] - @activationDisposables.add(@contextMenuManager.add(itemsBySelector)) - catch error - if error.code is 'EBADSELECTOR' - error.message += " in #{menuPath}" - error.stack += "\n at #{menuPath}:1:1" - throw error - - @activationDisposables.add(@menuManager.add(map['menu'])) for [menuPath, map] in @menus when map['menu']? + unless @preloadedPackage + @activateContextMenus() + @activateMenus() unless @grammarsActivated grammar.activate() for grammar in @grammars @grammarsActivated = true - settings.activate() for settings in @settings - @settingsActivated = true + unless @preloadedPackage + settings.activate() for settings in @settings + @settingsActivated = true activateKeymaps: -> return if @keymapActivated @keymapDisposables = new CompositeDisposable() - @keymapDisposables.add(@keymapManager.add(keymapPath, map)) for [keymapPath, map] in @keymaps + validateSelectors = not @preloadedPackage + @keymapDisposables.add(@keymapManager.add(keymapPath, map, 0, validateSelectors)) for [keymapPath, map] in @keymaps @menuManager.update() @keymapActivated = true @@ -283,6 +284,22 @@ class Package return true false + activateContextMenus: -> + validateSelectors = not @preloadedPackage + for [menuPath, map] in @menus when map['context-menu']? + try + itemsBySelector = map['context-menu'] + @activationDisposables.add(@contextMenuManager.add(itemsBySelector, validateSelectors)) + catch error + if error.code is 'EBADSELECTOR' + error.message += " in #{menuPath}" + error.stack += "\n at #{menuPath}:1:1" + throw error + + activateMenus: -> + for [menuPath, map] in @menus when map['menu']? + @activationDisposables.add(@menuManager.add(map['menu'])) + activateServices: -> for name, {versions} of @metadata.providedServices servicesByVersion = {}