chore: implemented multiple instances instead of multiple appications? (#4733)

This commit is contained in:
Kevin Nadro
2024-12-10 13:51:24 -05:00
committed by GitHub
parent d3a3f4410c
commit 548c664db0

View File

@ -23,6 +23,15 @@ import argvFromYargs from './commandLineArgs'
let mainWindow: BrowserWindow | null = null
// Supporting multiple instances instead of multiple applications
let cmdQPressed = false
const instances: BrowserWindow[] = []
const gotTheLock = app.requestSingleInstanceLock()
if (!gotTheLock) {
app.quit()
process.exit(0)
}
// Check the command line arguments for a project path
const args = parseCLIArgs()
@ -117,16 +126,34 @@ const createWindow = (filePath?: string): BrowserWindow => {
newWindow.show()
instances.push(newWindow)
return newWindow
}
// before-quit with multiple instances
if (process.platform === 'darwin') {
// Quit from the dock context menu should quit the application directly
app.on('before-quit', () => {
cmdQPressed = true
})
}
// Quit when all windows are closed, even on macOS. There, it's common
// for applications and their menu bar to stay active until the user quits
// explicitly with Cmd + Q, but it is a really weird behavior with our app.
// app.on('window-all-closed', () => {
// app.quit()
// })
app.on('window-all-closed', () => {
app.quit()
if (cmdQPressed || process.platform !== 'darwin') {
app.quit()
}
})
// Various actions can trigger this event, such as launching the application for the first time,
// attempting to re-launch the application when it's already running, or clicking on the application's dock or taskbar icon.
app.on('activate', () => createWindow())
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
@ -135,6 +162,10 @@ app.on('ready', (event, data) => {
mainWindow = createWindow()
})
// This event will be emitted inside the primary instance of your application when a second instance
// has been executed and calls app.requestSingleInstanceLock().
app.on('second-instance', (event, argv, workingDirectory) => createWindow())
// For now there is no good reason to separate these out to another file(s)
// There is just not enough code to warrant it and further abstracts everything
// which is already quite abstracted