From 84990559ecbbeb25c1867654b0f6366688d2dcad Mon Sep 17 00:00:00 2001 From: Germain Souquet Date: Wed, 31 Mar 2021 08:58:24 +0100 Subject: [PATCH 1/3] Avoid exit listener to hijack other application shortcuts --- src/electron-main.js | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/electron-main.js b/src/electron-main.js index dfbc6dd..87161b5 100644 --- a/src/electron-main.js +++ b/src/electron-main.js @@ -46,6 +46,7 @@ const fs = require('fs'); const afs = fs.promises; const crypto = require('crypto'); +const { platform } = require('os'); let keytar; try { keytar = require('keytar'); @@ -255,8 +256,17 @@ let eventIndex = null; let mainWindow = null; global.appQuitting = false; -const warnBeforeExit = (event) => { - if (store.get('warnBeforeExit', true)) { +const exitShortcuts = [ + (input, platform) => platform !== 'darwin' && input.alt && input.code === 'F4', + (input, platform) => platform !== 'darwin' && input.control && input.code === 'KeyQ', + (input, platform) => platform === 'darwin' && input.meta && input.code === 'KeyQ', +]; + +const warnBeforeExit = (event, input) => { + const shouldWarnBeforeExit = store.get('warnBeforeExit', true); + const shortcutPressed = exitShortcuts.some(shortcutFn => shortcutFn(input, process.platform)); + + if (shouldWarnBeforeExit && shortcutPressed) { const shouldCancelCloseRequest = dialog.showMessageBoxSync(mainWindow, { type: "question", buttons: ["Cancel", "Close Element"], @@ -267,7 +277,6 @@ const warnBeforeExit = (event) => { if (shouldCancelCloseRequest) { event.preventDefault(); - return false; } } }; @@ -941,11 +950,7 @@ app.on('ready', async () => { } }); - globalShortcut.register("CommandOrControl+Q", warnBeforeExit); - if (process.platform !== 'darwin') { - globalShortcut.register("Alt+F4", warnBeforeExit); - globalShortcut.register("AltGr+F4 ", warnBeforeExit); - } + mainWindow.webContents.on('before-input-event', warnBeforeExit); mainWindow.on('closed', () => { mainWindow = global.mainWindow = null; From 5fc871492e0fb0c85b3962270019c266afea0e2b Mon Sep 17 00:00:00 2001 From: Germain Souquet Date: Wed, 31 Mar 2021 17:18:39 +0100 Subject: [PATCH 2/3] make shortcut pressed variable more explanatory --- src/electron-main.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/electron-main.js b/src/electron-main.js index 87161b5..750b138 100644 --- a/src/electron-main.js +++ b/src/electron-main.js @@ -264,9 +264,9 @@ const exitShortcuts = [ const warnBeforeExit = (event, input) => { const shouldWarnBeforeExit = store.get('warnBeforeExit', true); - const shortcutPressed = exitShortcuts.some(shortcutFn => shortcutFn(input, process.platform)); + const exitShortcutPressed = exitShortcuts.some(shortcutFn => shortcutFn(input, process.platform)); - if (shouldWarnBeforeExit && shortcutPressed) { + if (shouldWarnBeforeExit && exitShortcutPressed) { const shouldCancelCloseRequest = dialog.showMessageBoxSync(mainWindow, { type: "question", buttons: ["Cancel", "Close Element"], From adfb4a424a0b9dda24b752e7c9f34db73aec0b61 Mon Sep 17 00:00:00 2001 From: Germain Souquet Date: Thu, 1 Apr 2021 09:30:15 +0100 Subject: [PATCH 3/3] remove unused imports --- src/electron-main.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/electron-main.js b/src/electron-main.js index 750b138..a7d4a76 100644 --- a/src/electron-main.js +++ b/src/electron-main.js @@ -28,7 +28,7 @@ const argv = require('minimist')(process.argv, { }); const { - app, ipcMain, powerSaveBlocker, BrowserWindow, Menu, autoUpdater, protocol, dialog, globalShortcut, + app, ipcMain, powerSaveBlocker, BrowserWindow, Menu, autoUpdater, protocol, dialog, } = require('electron'); const AutoLaunch = require('auto-launch'); const path = require('path'); @@ -46,7 +46,6 @@ const fs = require('fs'); const afs = fs.promises; const crypto = require('crypto'); -const { platform } = require('os'); let keytar; try { keytar = require('keytar');