| Index: lib/main.js |
| =================================================================== |
| --- a/lib/main.js |
| +++ b/lib/main.js |
| @@ -10,6 +10,7 @@ |
| Cu.import("resource://gre/modules/XPCOMUtils.jsm"); |
| Cu.import("resource://gre/modules/Services.jsm"); |
| +Cu.import("resource://gre/modules/AddonManager.jsm"); |
| let {TimeLine} = require("timeline"); |
| @@ -28,24 +29,111 @@ |
| TimeLine.log("Done loading sync support"); |
| require("ui"); |
| TimeLine.log("Done loading UI integration code"); |
| -if (!Prefs.correctTyposAsked || (Prefs.correctTyposAsked && Prefs.correctTypos)) |
| +(function() |
|
Wladimir Palant
2012/11/19 07:30:02
Please move that entire logic into a separate typo
|
| { |
| - require("typoFixer"); |
| - TimeLine.log("Done loading typo correction"); |
| -} |
| -else |
| -{ |
| - let onPrefChange = function(name) |
| + let urlfixerID = "{0fa2149e-bb2c-4ac2-a8d3-479599819475}"; |
| + let isTypoCorrectionEnabled; |
| + let typoFixerLoaded = false; |
| + |
| + function enableTypoCorrection() |
| { |
| - if (name == "correctTypos") |
| + if (isTypoCorrectionEnabled) |
| + return; |
| + |
| + if (typoFixerLoaded) |
| + { |
| + require("typoFixer").attachWindowObserver(); |
| + } |
| + else |
| { |
| require("typoFixer"); |
| - Prefs.removeListener(onPrefChange); |
| + typoFixerLoaded = true; |
| + } |
|
Wladimir Palant
2012/11/19 07:30:02
How about just doing require("typoFixer").attachWi
|
| + |
| + isTypoCorrectionEnabled = true; |
| + } |
| + |
| + function disableTypoCorrection() |
| + { |
| + if (!isTypoCorrectionEnabled) |
| + return; |
| + |
| + if (typoFixerLoaded) |
| + { |
| + require("typoFixer").detachWindowObserver(); |
| + } |
|
Wladimir Palant
2012/11/19 07:30:02
How about just doing require("typoFixer").detachWi
|
| + |
| + isTypoCorrectionEnabled = false; |
| + } |
| + |
| + function checkAddonStatusAndEnable() |
| + { |
| + AddonManager.getAddonByID(urlfixerID, function(addon) |
| + { |
| + checkAndEnable(addon && !addon.userDisabled); |
| + }); |
| + } |
| + |
| + function checkAndEnable(isInstalledAndEnabled) |
| + { |
| + if (isInstalledAndEnabled) |
| + { |
| + disableTypoCorrection(); |
| + } |
| + else |
| + { |
| + if (!Prefs.correctTyposAsked || (Prefs.correctTyposAsked && Prefs.correctTypos)) |
|
Wladimir Palant
2012/11/19 07:30:02
This logic seems wrong. If typo corrections are di
|
| + { |
| + enableTypoCorrection(); |
| + } |
| + else if (!typoFixerLoaded) |
| + { |
| + function onPrefChange(name) |
| + { |
| + if (name == "correctTypos") |
| + { |
| + checkAddonStatusAndEnable(); |
| + Prefs.removeListener(onPrefChange); |
| + } |
| + } |
| + |
| + Prefs.addListener(onPrefChange); |
| + } |
| } |
| } |
| - Prefs.addListener(onPrefChange); |
| -} |
| + let addonListener = { |
| + onEnabling: function(addon, needsRestart) |
| + { |
| + if (addon.id == urlfixerID) |
| + checkAndEnable(true); |
| + }, |
| + onDisabled: function(addon) |
| + { |
| + if (addon.id == urlfixerID) |
| + checkAndEnable(false); |
| + }, |
| + onInstalling: function(addon, needsRestart) |
| + { |
| + if (addon.id == urlfixerID) |
| + checkAndEnable(true); |
| + }, |
| + onUninstalled: function(addon) |
| + { |
| + if (addon.id == urlfixerID) |
| + checkAndEnable(false); |
| + }, |
| + onOperationCancelled: function(addon) |
| + { |
| + if (addon.id == urlfixerID) |
| + checkAddonStatusAndEnable(); |
|
Wladimir Palant
2012/11/19 07:30:02
Please ignore this call - URL Fixer is restartless
|
| + } |
| + } |
| + AddonManager.addAddonListener(addonListener); |
| + |
| + checkAddonStatusAndEnable(); |
| +})(); |
| +TimeLine.log("Done loading typo correction"); |
| TimeLine.leave("Started up"); |
| function registerPublicAPI() |