diff --git a/common/bootstrap.js b/common/bootstrap.js index df202035..d28b57ee 100755 --- a/common/bootstrap.js +++ b/common/bootstrap.js @@ -178,9 +178,11 @@ let JSMLoader = { // Cuts down on stupid, fscking url mangling. get loadSubScript() bootstrap_jsm.loadSubScript, - cleanup: function unregister() { - for each (let factory in this.factories.splice(0)) + cleanup: function cleanup() { + for (let factory of this.factories.splice(0)) { + debug("bootstrap: unregister factory: " + factory.classID); manager.unregisterFactory(factory.classID, factory); + } }, Factory: function Factory(class_) ({ @@ -202,6 +204,7 @@ let JSMLoader = { }), registerFactory: function registerFactory(factory) { + debug("bootstrap: register factory: " + factory.classID + " " + factory.contractID); manager.registerFactory(factory.classID, String(factory.classID), factory.contractID, diff --git a/common/content/events.js b/common/content/events.js index 0bb8fc26..5f2ca4f9 100644 --- a/common/content/events.js +++ b/common/content/events.js @@ -188,6 +188,11 @@ var Events = Module("events", { this.listen(window, this, "events", true); this.listen(window, this.popups, "events", true); + + this.grabFocus = 0; + this.grabFocusTimer = Timer(100, 10000, () => { + this.grabFocus = 0; + }); }, cleanup: function cleanup() { @@ -616,11 +621,15 @@ var Events = Module("events", { Ci.nsIDOMHTMLSelectElement, Ci.nsIDOMHTMLTextAreaElement, Ci.nsIDOMWindow])) { - - if (elem.frameElement) - dactyl.focusContent(true); - else if (!(elem instanceof Window) || Editor.getEditor(elem)) - dactyl.focus(window); + if (this.grabFocus++ > 5) + ; // Something is fighting us. Give up. + else { + this.grabFocusTimer.tell(); + if (elem.frameElement) + dactyl.focusContent(true); + else if (!(elem instanceof Window) || Editor.getEditor(elem)) + dactyl.focus(window); + } } if (elem instanceof Element) diff --git a/common/modules/config.jsm b/common/modules/config.jsm index f59f44cc..359cf526 100644 --- a/common/modules/config.jsm +++ b/common/modules/config.jsm @@ -53,10 +53,14 @@ var ConfigBase = Class("ConfigBase", { this.loadConfig(); - JSMLoader.registerFactory(JSMLoader.Factory(AboutHandler)); - JSMLoader.registerFactory(JSMLoader.Factory( - Protocol("dactyl", "{9c8f2530-51c8-4d41-b356-319e0b155c44}", - "resource://dactyl-content/"))); + util.trapErrors(() => { + JSMLoader.registerFactory(JSMLoader.Factory(AboutHandler)); + }); + util.withProperErrors(() => { + JSMLoader.registerFactory(JSMLoader.Factory( + Protocol("dactyl", "{9c8f2530-51c8-4d41-b356-319e0b155c44}", + "resource://dactyl-content/"))); + }); this.protocolLoaded = true; this.timeout(function () { diff --git a/common/modules/util.jsm b/common/modules/util.jsm index 4c0aca36..63c17443 100644 --- a/common/modules/util.jsm +++ b/common/modules/util.jsm @@ -1174,8 +1174,6 @@ var Util = Module("Util", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReference]), util.trapErrors(module.cleanup, module, reason); } - JSMLoader.cleanup(); - if (!this.rehashing) services.observer.addObserver(this, "dactyl-rehash", true); },