From b57d2e1dd0e98de731f2b3286541a7cd68ef2499 Mon Sep 17 00:00:00 2001 From: Tom Munro Date: Wed, 29 Jul 2015 11:59:32 -0700 Subject: [PATCH] Move `disabledKeymaps` observer into package manager --- spec/package-manager-spec.coffee | 1 + src/package-manager.coffee | 15 +++++++++++++++ src/package.coffee | 13 ++++++------- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/spec/package-manager-spec.coffee b/spec/package-manager-spec.coffee index 99b1bdcd3..72b8d6294 100644 --- a/spec/package-manager-spec.coffee +++ b/spec/package-manager-spec.coffee @@ -455,6 +455,7 @@ describe "PackageManager", -> describe "when the package's keymaps are disabled and re-enabled after it is activated", -> it "removes and re-adds the keymaps", -> element1 = $$ -> @div class: 'test-1' + atom.packages.observeDisabledKeymaps() waitsForPromise -> atom.packages.activatePackage("package-with-keymaps-manifest") diff --git a/src/package-manager.coffee b/src/package-manager.coffee index 2dd5f29cd..ba8ec016c 100644 --- a/src/package-manager.coffee +++ b/src/package-manager.coffee @@ -310,6 +310,19 @@ class PackageManager @activatePackage(packageName) for packageName in packagesToEnable null + unobserveDisabledKeymaps: -> + @disabledKeymapsSubscription?.dispose() + @disabledKeymapsSubscription = null + + observeDisabledKeymaps: -> + @disabledKeymapsSubscription ?= atom.config.onDidChange 'core.disabledKeymaps', ({newValue, oldValue}) => + keymapsToEnable = _.difference(oldValue, newValue) + keymapsToDisable = _.difference(newValue, oldValue) + + @getLoadedPackage(packageName).deactivateKeymaps() for packageName in keymapsToDisable when not @isPackageDisabled(packageName) + @getLoadedPackage(packageName).activateKeymaps() for packageName in keymapsToEnable when not @isPackageDisabled(packageName) + null + loadPackages: -> # Ensure atom exports is already in the require cache so the load time # of the first package isn't skewed by being the first to require atom @@ -396,6 +409,7 @@ class PackageManager promises.push(promise) unless pack.hasActivationCommands() return @observeDisabledPackages() + @observeDisabledKeymaps() promises # Activate a single package by name @@ -424,6 +438,7 @@ class PackageManager @deactivatePackage(pack.name) for pack in @getLoadedPackages() return @unobserveDisabledPackages() + @unobserveDisabledKeymaps() # Deactivate the package with the given name deactivatePackage: (name) -> diff --git a/src/package.coffee b/src/package.coffee index 599150080..be168e9f8 100644 --- a/src/package.coffee +++ b/src/package.coffee @@ -201,12 +201,11 @@ class Package activateResources: -> @activationDisposables = new CompositeDisposable - @activationDisposables.add atom.config.observe "core.disabledKeymaps", {}, (map) => - value = not _.include(map ? [], @name) - if value - @activateKeymaps() - else if not value - @deactivateKeymaps() + value = not _.include(atom.config.get("core.disabledKeymaps") ? [], @name) + if value + @activateKeymaps() + else if not value + @deactivateKeymaps() for [menuPath, map] in @menus when map['context-menu']? try @@ -260,7 +259,7 @@ class Package for [path, map] in @keymaps if map.length > 0 return true - + false activateServices: ->