Prevent duplicate main window

Fixes #3964
This commit is contained in:
Abe Jellinek 2024-04-11 08:46:08 -07:00 committed by Dan Stillman
parent c31c091cb0
commit 210d815173
3 changed files with 16 additions and 14 deletions

View file

@ -1,5 +1,11 @@
let { CommandLineOptions, TestOptions } = ChromeUtils.importESModule("chrome://zotero/content/modules/commandLineOptions.mjs");
// Only allow BrowserContentHandler to open a new window if this is the initial launch,
// meaning our CLH isn't registered yet.
if (cmdLine.state != Ci.nsICommandLine.STATE_INITIAL_LAUNCH) {
cmdLine.preventDefault = true;
}
// Force debug output to window
if (cmdLine.handleFlag("ZoteroDebug", false)) {
CommandLineOptions.forceDebugLog = 2;

View file

@ -31,18 +31,16 @@ Zotero.CommandLineIngester = {
ingest: async function () {
const { CommandLineOptions } = ChromeUtils.importESModule("chrome://zotero/content/modules/commandLineOptions.mjs");
var mainWindow = Zotero.getMainWindow();
var fileToOpen;
// Handle zotero:// and file URIs
var uri = CommandLineOptions.url;
if (uri) {
if (uri.schemeIs("zotero")) {
// Check for existing window and focus it
var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
.getService(Components.interfaces.nsIWindowMediator);
var win = wm.getMostRecentWindow("navigator:browser");
if (win) {
win.focus();
win.ZoteroPane.loadURI(uri.spec);
if (mainWindow) {
mainWindow.focus();
mainWindow.ZoteroPane.loadURI(uri.spec);
}
}
// See below
@ -77,11 +75,7 @@ Zotero.CommandLineIngester = {
'import.createNewCollection.fromFileOpenHandler', checkState.value
);
// Perform file import in front window
var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
.getService(Components.interfaces.nsIWindowMediator);
var browserWindow = wm.getMostRecentWindow("navigator:browser");
browserWindow.Zotero_File_Interface.importFile({
mainWindow.Zotero_File_Interface.importFile({
file,
createNewCollection: checkState.value
});
@ -107,9 +101,6 @@ var ZoteroCommandLineHandler = {
// this is typically used on Windows only, via WM_COPYDATA rather than the command line
var agent = cmdLine.handleFlagWithParam("ZoteroIntegrationAgent", false);
if (agent) {
// Don't open a new window
cmdLine.preventDefault = true;
var command = cmdLine.handleFlagWithParam("ZoteroIntegrationCommand", false);
var docId = cmdLine.handleFlagWithParam("ZoteroIntegrationDocument", false);
var templateVersion = parseInt(cmdLine.handleFlagWithParam("ZoteroIntegrationTemplateVersion", false));
@ -117,6 +108,10 @@ var ZoteroCommandLineHandler = {
Zotero.Integration.execCommand(agent, command, docId, templateVersion);
}
// Only open main window if we aren't handling an integration command
else if (!Zotero.getMainWindow()) {
Zotero.openMainWindow();
}
await Zotero.CommandLineIngester.ingest();
},

View file

@ -967,6 +967,7 @@ Services.scriptloader.loadSubScript("resource://zotero/polyfill.js");
this.openMainWindow = function () {
const { AppConstants } = ChromeUtils.import("resource://gre/modules/AppConstants.jsm");
var chromeURI = AppConstants.BROWSER_CHROME_URL;
var flags = "chrome,all,dialog=no";
var ww = Components.classes['@mozilla.org/embedcomp/window-watcher;1']