From 6afa7fdbff08d4bd566d63ce88c22fd93b412403 Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Wed, 19 Sep 2007 07:02:07 +0000 Subject: [PATCH] Fixes #768, createHiddenBrowser() doesn't work on Windows using hiddenDOMWindow Addresses #750, Creating a hidden browser causes a persistent wait cursor Revert use of hidden window -- found another way to get rid of the wait cursor (by deleting the browser on a timer after importFromDocument()) --- chrome/content/zotero/xpcom/attachments.js | 19 ++++------------ chrome/content/zotero/xpcom/zotero.js | 25 ++++++++-------------- 2 files changed, 13 insertions(+), 31 deletions(-) diff --git a/chrome/content/zotero/xpcom/attachments.js b/chrome/content/zotero/xpcom/attachments.js index 1738dffcb..123ba64e0 100644 --- a/chrome/content/zotero/xpcom/attachments.js +++ b/chrome/content/zotero/xpcom/attachments.js @@ -196,27 +196,15 @@ Zotero.Attachments = new function(){ if (Zotero.MIME.hasNativeHandler(mimeType, ext)){ var browser = Zotero.Browser.createHiddenBrowser(); var onpageshow = function() { - try { - Zotero.Attachments.importFromDocument(browser.contentDocument, - sourceItemID, forceTitle, parentCollectionIDs); - } - finally { - browser.removeEventListener("pageshow", onpageshow, true); - Zotero.Browser.deleteHiddenBrowser(browser); - } - - /* Built-in method -- disabled in favor of WebPageDump - var callback = function () { - browser.removeEventListener("pageshow", arguments.callee, true); + browser.removeEventListener("pageshow", onpageshow, false); Zotero.Browser.deleteHiddenBrowser(browser); }; Zotero.Attachments.importFromDocument(browser.contentDocument, sourceItemID, forceTitle, parentCollectionIDs, callback); - */ }; - browser.addEventListener("pageshow", onpageshow, true); + browser.addEventListener("pageshow", onpageshow, false); browser.loadURI(url); } @@ -417,7 +405,7 @@ Zotero.Attachments = new function(){ /* * Save a snapshot -- uses synchronous WebPageDump or asynchronous saveURI() */ - function importFromDocument(document, sourceItemID, forceTitle, parentCollectionIDs) { + function importFromDocument(document, sourceItemID, forceTitle, parentCollectionIDs, callback) { Zotero.debug('Importing attachment from document'); var url = document.location.href; @@ -467,6 +455,7 @@ Zotero.Attachments = new function(){ var f = function() { Zotero.Fulltext.indexDocument(document, itemID); Zotero.Notifier.trigger('refresh', 'item', itemID); + callback(); }; } diff --git a/chrome/content/zotero/xpcom/zotero.js b/chrome/content/zotero/xpcom/zotero.js index e13f01ae0..8537a4217 100644 --- a/chrome/content/zotero/xpcom/zotero.js +++ b/chrome/content/zotero/xpcom/zotero.js @@ -1580,26 +1580,19 @@ Zotero.Browser = new function() { this.createHiddenBrowser = createHiddenBrowser; this.deleteHiddenBrowser = deleteHiddenBrowser; - function createHiddenBrowser(myWindow) { - if(!myWindow) { - // Use the hidden window, since using the main window causes - // a persistent wait cursor - var myWindow = Components.classes["@mozilla.org/appshell/appShellService;1"] - .getService(Components.interfaces.nsIAppShellService) - .hiddenDOMWindow; - /* - var myWindow = Components.classes["@mozilla.org/appshell/window-mediator;1"] - .getService(Components.interfaces.nsIWindowMediator) - .getMostRecentWindow("navigator:browser"); - */ + function createHiddenBrowser(win) { + if (!win) { + var win = Components.classes["@mozilla.org/appshell/window-mediator;1"] + .getService(Components.interfaces.nsIWindowMediator) + .getMostRecentWindow("navigator:browser"); } // Create a hidden browser - var newHiddenBrowser = myWindow.document.createElement("browser"); - myWindow.document.documentElement.appendChild(newHiddenBrowser); + var hiddenBrowser = win.document.createElement("browser"); + win.document.documentElement.appendChild(hiddenBrowser); Zotero.debug("created hidden browser (" - + myWindow.document.getElementsByTagName('browser').length + ")"); - return newHiddenBrowser; + + win.document.getElementsByTagName('browser').length + ")"); + return hiddenBrowser; } function deleteHiddenBrowser(myBrowser) {