chore: implemented multiple instances instead of multiple appications? (#4733)
This commit is contained in:
31
src/main.ts
31
src/main.ts
@ -23,6 +23,15 @@ import argvFromYargs from './commandLineArgs'
|
|||||||
|
|
||||||
let mainWindow: BrowserWindow | null = null
|
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
|
// Check the command line arguments for a project path
|
||||||
const args = parseCLIArgs()
|
const args = parseCLIArgs()
|
||||||
|
|
||||||
@ -117,16 +126,34 @@ const createWindow = (filePath?: string): BrowserWindow => {
|
|||||||
|
|
||||||
newWindow.show()
|
newWindow.show()
|
||||||
|
|
||||||
|
instances.push(newWindow)
|
||||||
return 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
|
// 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
|
// 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.
|
// 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.on('window-all-closed', () => {
|
||||||
|
if (cmdQPressed || process.platform !== 'darwin') {
|
||||||
app.quit()
|
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
|
// This method will be called when Electron has finished
|
||||||
// initialization and is ready to create browser windows.
|
// initialization and is ready to create browser windows.
|
||||||
// Some APIs can only be used after this event occurs.
|
// Some APIs can only be used after this event occurs.
|
||||||
@ -135,6 +162,10 @@ app.on('ready', (event, data) => {
|
|||||||
mainWindow = createWindow()
|
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)
|
// 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
|
// There is just not enough code to warrant it and further abstracts everything
|
||||||
// which is already quite abstracted
|
// which is already quite abstracted
|
||||||
|
Reference in New Issue
Block a user