diff --git a/common/content/dactyl.js b/common/content/dactyl.js index e4c48d04..2d932031 100644 --- a/common/content/dactyl.js +++ b/common/content/dactyl.js @@ -1209,7 +1209,7 @@ var Dactyl = Module("dactyl", XPCOM(Ci.nsISupportsWeakReference, ModuleBase), { * @property {[Window]} Returns an array of all the host application's * open windows. */ - get windows() [win for (win in iter(services.windowMediator.getEnumerator("navigator:browser"))) if (win.dactyl)], + get windows() [w for (w of overlay.windows)] }, { toolbarHidden: function hidden(elem) (elem.getAttribute("autohide") || elem.getAttribute("collapsed")) == "true" @@ -1591,7 +1591,7 @@ var Dactyl = Module("dactyl", XPCOM(Ci.nsISupportsWeakReference, ModuleBase), { function (args) { if (dactyl.has("tabs") && tabs.remove(tabs.getTab(), 1, false)) return; - else if (dactyl.windows.length > 1) + else if (dactyl.windows.size > 1) window.close(); else dactyl.quit(false, args.bang); diff --git a/common/modules/base.jsm b/common/modules/base.jsm index 39844289..4332683d 100644 --- a/common/modules/base.jsm +++ b/common/modules/base.jsm @@ -378,6 +378,9 @@ function values(obj) iter(function values() { else if (isinstance(obj, ["Generator", "Iterator", Iter])) for (let k in obj) yield k; + else if (iter.iteratorProp in obj) + for (let v of obj) + yield v; else for (var k in obj) if (hasOwnProperty(obj, k)) diff --git a/common/modules/main.jsm b/common/modules/main.jsm index 13fd5aba..1c067f90 100644 --- a/common/modules/main.jsm +++ b/common/modules/main.jsm @@ -231,7 +231,7 @@ overlay.overlayWindow(Object.keys(config.overlays), }, cleanup: function cleanup(window) { - overlay.windows = overlay.windows.filter(w => w != window); + overlay.windows.remove(window); Cu.nukeSandbox(this.jsmodules); }, @@ -252,7 +252,7 @@ overlay.overlayWindow(Object.keys(config.overlays), defineModule.loadLog.push("Loaded in " + (Date.now() - this.startTime) + "ms"); - overlay.windows = array.uniq(overlay.windows.concat(window), true); + overlay.windows.add(window); }, loadModule: function loadModule(module, prereq, frame) { diff --git a/common/modules/overlay.jsm b/common/modules/overlay.jsm index b1f1cab7..ae55eacb 100644 --- a/common/modules/overlay.jsm +++ b/common/modules/overlay.jsm @@ -404,19 +404,22 @@ var Overlay = Module("Overlay", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReferen get activeModules() this.activeWindow && this.activeWindow.dactyl.modules, - get modules() this.windows.map(w => w.dactyl.modules), + get modules() [w.dactyl.modules for (w of this.windows)], /** * The most recently active dactyl window. */ - get activeWindow() this.windows[0], + get activeWindow() { + let win = this._activeWindow && this._activeWindow.get(); + return this.windows.has(win) && win; + }, - set activeWindow(win) this.windows = [win].concat(this.windows.filter(w => w != win)), + set activeWindow(win) this._activeWindow = util.weakReference(win), /** * A list of extant dactyl windows. */ - windows: Class.Memoize(() => []) + windows: Class.Memoize(() => RealSet()) }); endModule();