Skip to content

Commit fc63ae5

Browse files
authored
Merge pull request #114 from arduino/feature/before-quit-electron
Alert before quit electron with unsaved changes
2 parents 2b560af + ba3241d commit fc63ae5

File tree

5 files changed

+36
-7
lines changed

5 files changed

+36
-7
lines changed

backend/helpers.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@ const path = require('path')
44

55
async function openFolderDialog(win) {
66
// https://stackoverflow.com/questions/46027287/electron-open-folder-dialog
7-
let dir = await dialog.showOpenDialog(win, { properties: [ 'openDirectory' ] })
7+
const dir = await dialog.showOpenDialog(win, { properties: [ 'openDirectory' ] })
88
return dir.filePaths[0] || null
99
}
1010

1111
function listFolder(folder) {
12-
files = fs.readdirSync(path.resolve(folder))
12+
let files = fs.readdirSync(path.resolve(folder))
1313
// Filter out directories
1414
files = files.filter(f => {
1515
let filePath = path.resolve(folder, f)
@@ -38,7 +38,7 @@ function ilistFolder(folder) {
3838

3939
function getAllFiles(dirPath, arrayOfFiles) {
4040
// https://coderrocketfuel.com/article/recursively-list-all-the-files-in-a-directory-using-node-js
41-
files = ilistFolder(dirPath)
41+
let files = ilistFolder(dirPath)
4242
arrayOfFiles = arrayOfFiles || []
4343
files.forEach(function(file) {
4444
const p = path.join(dirPath, file.path)

backend/ipc.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ const {
66
getAllFiles
77
} = require('./helpers.js')
88

9-
module.exports = function registerIPCHandlers(win, ipcMain) {
9+
module.exports = function registerIPCHandlers(win, ipcMain, app) {
1010
ipcMain.handle('open-folder', async (event) => {
1111
console.log('ipcMain', 'open-folder')
1212
const folder = await openFolderDialog(win)
@@ -107,4 +107,15 @@ module.exports = function registerIPCHandlers(win, ipcMain) {
107107

108108
win.setMinimumSize(minWidth, minHeight)
109109
})
110+
111+
ipcMain.handle('confirm-close', () => {
112+
console.log('ipcMain', 'confirm-close')
113+
app.exit()
114+
})
115+
116+
win.on('close', (event) => {
117+
console.log('BrowserWindow', 'close')
118+
event.preventDefault()
119+
win.webContents.send('check-before-close')
120+
})
110121
}

index.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,17 @@ function createWindow () {
2323
// and load the index.html of the app.
2424
win.loadFile('ui/arduino/index.html')
2525

26-
registerIPCHandlers(win, ipcMain)
26+
registerIPCHandlers(win, ipcMain, app)
2727
registerMenu(win)
28+
29+
app.on('activate', () => {
30+
if (BrowserWindow.getAllWindows().length === 0) createWindow()
31+
})
32+
// app.on('window-all-closed', () => {
33+
// if (process.platform !== 'darwin') app.quit()
34+
// })
2835
}
2936

3037

3138
// TODO: Loading splash screen
32-
3339
app.whenReady().then(createWindow)

preload.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,9 +151,12 @@ const Disk = {
151151
const Window = {
152152
setWindowSize: (minWidth, minHeight) => {
153153
ipcRenderer.invoke('set-window-size', minWidth, minHeight)
154-
}
154+
},
155+
beforeClose: (callback) => ipcRenderer.on('check-before-close', callback),
156+
confirmClose: () => ipcRenderer.invoke('confirm-close')
155157
}
156158

159+
157160
contextBridge.exposeInMainWorld('BridgeSerial', Serial)
158161
contextBridge.exposeInMainWorld('BridgeDisk', Disk)
159162
contextBridge.exposeInMainWorld('BridgeWindow', Window)

ui/arduino/store.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1303,6 +1303,15 @@ async function store(state, emitter) {
13031303
emitter.emit('render')
13041304
})
13051305

1306+
win.beforeClose(async () => {
1307+
const hasChanges = !!state.openFiles.find(f => f.parentFolder && f.hasChanges)
1308+
if (hasChanges) {
1309+
const response = await confirm('You may have unsaved changes. Are you sure you want to proceed?', 'Yes', 'Cancel')
1310+
if (!response) return false
1311+
}
1312+
await win.confirmClose()
1313+
})
1314+
13061315
function createFile(args) {
13071316
const {
13081317
source,

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy