1
0
mirror of https://github.com/gryf/pentadactyl-pm.git synced 2026-01-08 23:54:13 +01:00

Use a better document iterator for applying overlays so that we can overlay documents in tabs as well.

This commit is contained in:
Kris Maglione
2011-02-02 16:21:57 -05:00
parent 475a3244c5
commit 475da7edd9
2 changed files with 28 additions and 9 deletions

View File

@@ -860,6 +860,23 @@ var Util = Module("Util", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReference]),
return style.visibility == "visible" && style.display != "none";
},
/**
* Iterates over all currently open documents, including all
* top-level window and sub-frames thereof.
*/
iterDocuments: function iterDocuments() {
let windows = services.windowMediator.getXULWindowEnumerator(null);
while (windows.hasMoreElements()) {
let window = windows.getNext().QueryInterface(Ci.nsIXULWindow);
for each (let type in ["typeChrome", "typeContent"]) {
let docShells = window.docShell.getDocShellEnumerator(Ci.nsIDocShellTreeItem[type],
Ci.nsIDocShell.ENUMERATE_FORWARDS);
while (docShells.hasMoreElements())
yield docShells.getNext().QueryInterface(Ci.nsIDocShell).contentViewer.DOMDocument;
}
}
},
/**
* Returns an XPath union expression constructed from the specified node
* tests. An expression is built with node tests for both the null and
@@ -1149,11 +1166,11 @@ var Util = Module("Util", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReference]),
this.overlays[url].push(fn);
}, this);
for (let win in iter(services.windowMediator.getEnumerator(null)))
if (["interactive", "complete"].indexOf(win.document.readyState) >= 0)
this._loadOverlays(win);
for (let doc in util.iterDocuments())
if (["interactive", "complete"].indexOf(doc.readyState) >= 0)
this._loadOverlays(doc.defaultView);
else
this.observe(win, "toplevel-window-ready");
this.observe(doc.defaultView, "toplevel-window-ready");
}
},

View File

@@ -52,13 +52,15 @@ function checkDocument(doc, disable, force) {
}
function chromeDocuments() {
let windows = Services.ww.getXULWindowEnumerator(null);
let windows = services.windowMediator.getXULWindowEnumerator(null);
while (windows.hasMoreElements()) {
let window = windows.getNext().QueryInterface(Ci.nsIXULWindow);
let docShells = window.docShell.getDocShellEnumerator(Ci.nsIDocShell.typeChrome,
Ci.nsIDocShell.ENUMERATE_FORWARDS);
while (docShells.hasMoreElements())
yield docShells.getNext().containedDocShells.DOMDocument;
for each (let type in ["typeChrome", "typeContent"]) {
let docShells = window.docShell.getDocShellEnumerator(Ci.nsIDocShellTreeItem[type],
Ci.nsIDocShell.ENUMERATE_FORWARDS);
while (docShells.hasMoreElements())
yield docShells.getNext().QueryInterface(Ci.nsIDocShell).contentViewer.DOMDocument;
}
}
}