From 82164113a32b27affaa585f1f5a57f750f8982a3 Mon Sep 17 00:00:00 2001 From: "Tod E. Kurt" Date: Tue, 2 Jul 2019 13:41:55 -0700 Subject: [PATCH] fix #116 by disallowing invalid accelerator keys, both on startup and in Prefs UI --- app/components/gui/preferencesModal.js | 24 ++++++++++++++++++------ app/main.js | 15 +++++++++++---- app/package.json | 1 + 3 files changed, 30 insertions(+), 10 deletions(-) diff --git a/app/components/gui/preferencesModal.js b/app/components/gui/preferencesModal.js index 2ef102d..f27d553 100644 --- a/app/components/gui/preferencesModal.js +++ b/app/components/gui/preferencesModal.js @@ -16,6 +16,7 @@ var ControlLabel = require('react-bootstrap').ControlLabel; var Radio = require('react-bootstrap').Radio; var Checkbox = require('react-bootstrap').Checkbox; +var isAccelerator = require("electron-is-accelerator"); var PatternsService = require('../../server/patternsService'); var Blink1Service = require('../../server/blink1Service'); @@ -85,8 +86,7 @@ loadSettings: function() { patterns: patterns, patternId: 'whiteflashes', nonComputerPattern: patterns[0].id, - nonComputerStatus: '', - errormsg: '' + errorMsg: '' }; return settings; }, @@ -185,13 +185,21 @@ handleBlink1NonComputerSet: function(event) { log.msg("setting pattern:",patt); err = Blink1Service.writePatternToBlink1(patt,true,0); } - - this.setState({nonComputerStatus: err}); + err = ( !err ) ? "success" : err; + this.setState({errorMsg: err}); }, handleInputChange: function(event) { var target = event.target; var value = target.type === 'checkbox' ? target.checked : target.value; var name = target.name; + if( name == 'shortcutResetKey' && value != '') { + var accel = this.state.shortcutPrefix +"+"+ value; + log.msg("accel:",accel); + if( !isAccelerator(accel) ) { + this.setState({errorMsg: "Cannot use '"+value+"' as shortcut key"}); + return; + } + } this.setState({[name]: value}); }, @@ -210,6 +218,7 @@ render: function() { paddingLeft: 15, paddingBottom: 10 }; + var errorSectStyle = { paddingLeft: 15, color:'red'}; return (
@@ -367,10 +376,13 @@ render: function() { - {this.state.nonComputerStatus}
- + + + +
{this.state.errorMsg}
+
diff --git a/app/main.js b/app/main.js index 7ef7d6a..de8c33c 100644 --- a/app/main.js +++ b/app/main.js @@ -10,6 +10,7 @@ var Menu = electron.Menu; var crashReporter = electron.crashReporter; var path = require('path'); +var isAccelerator = require("electron-is-accelerator"); var updater = require('./updater'); @@ -203,14 +204,20 @@ app.on('ready', function () { var globalShortcutPrefix = config.readSettings('startup:shortcutPrefix') || 'CommandOrControl+Shift'; var resetKey = config.readSettings('startup:shortcutResetKey') || 'R'; var resetShortcut = globalShortcutPrefix + '+' + resetKey; + console.log("global shortcut:", resetShortcut); - var ret = globalShortcut.register(resetShortcut, function() { - // console.log('resetShortcut is pressed'); - mainWindow.webContents.send('resetAlerts'); + if( isAccelerator( resetShortcut)) { + var ret = globalShortcut.register(resetShortcut, function() { + // console.log('resetShortcut is pressed'); + mainWindow.webContents.send('resetAlerts'); }); if (!ret) { console.log('globalShortcut registration failed'); } // Check whether a shortcut is registered. - console.log("global shortcut key registered:", globalShortcut.isRegistered(resetShortcut)); + console.log("globalShortcut key registered:", globalShortcut.isRegistered(resetShortcut)); + } + else { + console.log("ignoring bad globalShortcutkey: ",resetShortcut); + } if( process.env.NODE_ENV === 'development' ) { mainWindow = new BrowserWindow({ diff --git a/app/package.json b/app/package.json index f1de41e..59fa74e 100644 --- a/app/package.json +++ b/app/package.json @@ -14,6 +14,7 @@ "auto-launch": "^5.0.1", "d3-timer": "^1.0.7", "debug": "^2.2.0", + "electron-is-accelerator": "^0.1.2", "electron-log": "^3.0.6", "electron-updater": "^4.0.6", "events": "^1.1.1",