|
@@ -4,7 +4,7 @@ import { app, protocol, BrowserWindow, Menu, globalShortcut } from 'electron'
|
|
|
import { createProtocol } from 'vue-cli-plugin-electron-builder/lib'
|
|
|
import installExtension, { VUEJS_DEVTOOLS } from 'electron-devtools-installer'
|
|
|
const isDevelopment = process.env.NODE_ENV !== 'production'
|
|
|
-
|
|
|
+let mainWindow
|
|
|
// Scheme must be registered before the app is ready
|
|
|
protocol.registerSchemesAsPrivileged([
|
|
|
{ scheme: 'app', privileges: { secure: true, standard: true } }
|
|
@@ -30,7 +30,7 @@ async function createWindow() {
|
|
|
icon: `${__static}/app.ico`
|
|
|
}
|
|
|
})
|
|
|
-
|
|
|
+ mainWindow = win
|
|
|
if (process.env.WEBPACK_DEV_SERVER_URL) {
|
|
|
// Load the url of the dev server if in development mode
|
|
|
// await win.loadURL(process.env.WEBPACK_DEV_SERVER_URL)
|
|
@@ -60,35 +60,46 @@ async function createWindow() {
|
|
|
Menu.setApplicationMenu(null)
|
|
|
}
|
|
|
|
|
|
-// Quit when all windows are closed.
|
|
|
-app.on('window-all-closed', () => {
|
|
|
- // On macOS it is common for applications and their menu bar
|
|
|
- // to stay active until the user quits explicitly with Cmd + Q
|
|
|
- if (process.platform !== 'darwin') {
|
|
|
- app.quit()
|
|
|
- }
|
|
|
-})
|
|
|
-
|
|
|
-app.on('activate', () => {
|
|
|
- // On macOS it's common to re-create a window in the app when the
|
|
|
- // dock icon is clicked and there are no other windows open.
|
|
|
- if (BrowserWindow.getAllWindows().length === 0) 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.
|
|
|
-app.on('ready', async () => {
|
|
|
- if (isDevelopment && !process.env.IS_TEST) {
|
|
|
- // Install Vue Devtools
|
|
|
- try {
|
|
|
- await installExtension(VUEJS_DEVTOOLS)
|
|
|
- } catch (e) {
|
|
|
- console.error('Vue Devtools failed to install:', e.toString())
|
|
|
+const gotTheLock = app.requestSingleInstanceLock()
|
|
|
+if (!gotTheLock) {
|
|
|
+ app.quit()
|
|
|
+} else {
|
|
|
+ app.on('second-instance', (event) => {
|
|
|
+ if (mainWindow) {
|
|
|
+ if (mainWindow.isMinimized()) mainWindow.restore()
|
|
|
+ mainWindow.focus()
|
|
|
}
|
|
|
- }
|
|
|
- createWindow()
|
|
|
-})
|
|
|
+ })
|
|
|
+ // Quit when all windows are closed.
|
|
|
+ app.on('window-all-closed', () => {
|
|
|
+ // On macOS it is common for applications and their menu bar
|
|
|
+ // to stay active until the user quits explicitly with Cmd + Q
|
|
|
+ if (process.platform !== 'darwin') {
|
|
|
+ app.quit()
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ app.on('activate', () => {
|
|
|
+ // On macOS it's common to re-create a window in the app when the
|
|
|
+ // dock icon is clicked and there are no other windows open.
|
|
|
+ if (BrowserWindow.getAllWindows().length === 0) 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.
|
|
|
+ app.on('ready', async () => {
|
|
|
+ if (isDevelopment && !process.env.IS_TEST) {
|
|
|
+ // Install Vue Devtools
|
|
|
+ try {
|
|
|
+ await installExtension(VUEJS_DEVTOOLS)
|
|
|
+ } catch (e) {
|
|
|
+ console.error('Vue Devtools failed to install:', e.toString())
|
|
|
+ }
|
|
|
+ }
|
|
|
+ createWindow()
|
|
|
+ })
|
|
|
+}
|
|
|
|
|
|
// Exit cleanly on request from parent process in development mode.
|
|
|
if (isDevelopment) {
|