diff --git a/Gruntfile.js b/Gruntfile.js index 5b720723..c8d427de 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -5,6 +5,9 @@ const path = require('path'); const webpackConfig = require('./build/webpack.config'); const pkg = require('./package.json'); +const hookRcedit = require('./build/util/hook-rcedit'); + +hookRcedit.setup(); module.exports = function(grunt) { require('time-grunt')(grunt); diff --git a/app/scripts/auto-type/index.js b/app/scripts/auto-type/index.js index c5e9fafd..c2cd02ec 100644 --- a/app/scripts/auto-type/index.js +++ b/app/scripts/auto-type/index.js @@ -254,7 +254,6 @@ const AutoType = { Events.emit('open-file'); Events.once('closed-open-view', () => { this.selectEntryView.show(); - this.selectEntryView.setupKeys(); }); }); }, diff --git a/app/scripts/collections/entry-collection.js b/app/scripts/collections/entry-collection.js index a06e0ff6..a0b68dd3 100644 --- a/app/scripts/collections/entry-collection.js +++ b/app/scripts/collections/entry-collection.js @@ -17,10 +17,10 @@ class EntryCollection extends Collection { '-created': Comparators.dateComparator('created', false), 'updated': Comparators.dateComparator('updated', true), '-updated': Comparators.dateComparator('updated', false), - '-attachments'(x, y) { + '-attachments': (x, y) => { return this.attachmentSortVal(x).localeCompare(this.attachmentSortVal(y)); }, - '-rank': Comparators.rankComparator() + '-rank': Comparators.rankComparator().bind(this) }; defaultComparator = 'title'; diff --git a/app/scripts/comp/browser/key-handler.js b/app/scripts/comp/browser/key-handler.js index b41166d9..5a821a36 100644 --- a/app/scripts/comp/browser/key-handler.js +++ b/app/scripts/comp/browser/key-handler.js @@ -63,7 +63,7 @@ class KeyHandler { const keyShortcuts = this.shortcuts[code]; if (keyShortcuts && keyShortcuts.length) { for (const sh of keyShortcuts) { - if (this.modal && sh.modal !== this.modal) { + if (this.modal && (sh.modal !== this.modal || sh.modal === '*')) { e.stopPropagation(); continue; } diff --git a/app/scripts/views/app-view.js b/app/scripts/views/app-view.js index 8bc7eff5..7af5bbd9 100644 --- a/app/scripts/views/app-view.js +++ b/app/scripts/views/app-view.js @@ -103,7 +103,8 @@ class AppView extends View { this.onKey( Keys.DOM_VK_I, this.openDevTools, - KeyHandler.SHORTCUT_ACTION + KeyHandler.SHORTCUT_OPT + KeyHandler.SHORTCUT_ACTION + KeyHandler.SHORTCUT_OPT, + '*' ); } diff --git a/app/scripts/views/auto-type/auto-type-select-view.js b/app/scripts/views/auto-type/auto-type-select-view.js index 077b8a06..21418b67 100644 --- a/app/scripts/views/auto-type/auto-type-select-view.js +++ b/app/scripts/views/auto-type/auto-type-select-view.js @@ -61,6 +61,12 @@ class AutoTypeSelectView extends View { this.once('remove', () => { KeyHandler.setModal(null); }); + this.on('show', () => { + KeyHandler.setModal('auto-type'); + }); + this.on('hide', () => { + KeyHandler.setModal(null); + }); } render() { diff --git a/app/scripts/views/modal-view.js b/app/scripts/views/modal-view.js index c1cddfad..829d7826 100644 --- a/app/scripts/views/modal-view.js +++ b/app/scripts/views/modal-view.js @@ -21,9 +21,10 @@ class ModalView extends View { if (typeof this.model.enter === 'string') { this.onKey(Keys.DOM_VK_RETURN, this.enterPressed, false, 'alert'); } + const prevModal = KeyHandler.modal; KeyHandler.setModal('alert'); this.once('remove', () => { - KeyHandler.setModal(null); + KeyHandler.setModal(prevModal); if (this.model.view) { this.model.view.remove(); } diff --git a/app/scripts/views/open-view.js b/app/scripts/views/open-view.js index 1b28b8a7..93caccb7 100644 --- a/app/scripts/views/open-view.js +++ b/app/scripts/views/open-view.js @@ -60,15 +60,17 @@ class OpenView extends View { super(model); this.resetParams(); this.passwordInput = new SecureInput(); - this.onKey(Keys.DOM_VK_Z, this.undoKeyPress, KeyHandler.SHORTCUT_ACTION); - this.onKey(Keys.DOM_VK_TAB, this.tabKeyPress); - this.onKey(Keys.DOM_VK_ENTER, this.enterKeyPress); - this.onKey(Keys.DOM_VK_RETURN, this.enterKeyPress); - this.onKey(Keys.DOM_VK_DOWN, this.moveOpenFileSelectionDown); - this.onKey(Keys.DOM_VK_UP, this.moveOpenFileSelectionUp); + this.onKey(Keys.DOM_VK_Z, this.undoKeyPress, KeyHandler.SHORTCUT_ACTION, 'open'); + this.onKey(Keys.DOM_VK_TAB, this.tabKeyPress, null, 'open'); + this.onKey(Keys.DOM_VK_ENTER, this.enterKeyPress, null, 'open'); + this.onKey(Keys.DOM_VK_RETURN, this.enterKeyPress, null, 'open'); + this.onKey(Keys.DOM_VK_DOWN, this.moveOpenFileSelectionDown, null, 'open'); + this.onKey(Keys.DOM_VK_UP, this.moveOpenFileSelectionUp, null, 'open'); this.listenTo(Events, 'main-window-focus', this.windowFocused.bind(this)); + KeyHandler.setModal('open'); this.once('remove', () => { this.passwordInput.reset(); + KeyHandler.setModal(null); }); } diff --git a/build/util/hook-rcedit.js b/build/util/hook-rcedit.js new file mode 100644 index 00000000..035ae44b --- /dev/null +++ b/build/util/hook-rcedit.js @@ -0,0 +1,21 @@ +const childProcess = require('child_process'); + +// remove this once wine can be run on macOS + +const childProcessSpawn = childProcess.spawn; + +function hookedSpawn(command, options) { + if (command === 'wine') { + options = options.map(option => { + if (option.includes(' ')) { + option = `"${option.replace('"', '\\"')}"`; + } + return option; + }); + } + return childProcessSpawn.call(childProcess, command, options); +} + +module.exports.setup = function() { + childProcess.spawn = hookedSpawn; +}; diff --git a/desktop/package-lock.json b/desktop/package-lock.json index 52c5f785..1b8752b8 100644 --- a/desktop/package-lock.json +++ b/desktop/package-lock.json @@ -1,6 +1,6 @@ { "name": "KeeWeb", - "version": "1.11.6", + "version": "1.11.7", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/desktop/package.json b/desktop/package.json index 02215600..f840846b 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -1,6 +1,6 @@ { "name": "KeeWeb", - "version": "1.11.6", + "version": "1.11.7", "description": "Free cross-platform password manager compatible with KeePass", "main": "main.js", "homepage": "https://keeweb.info", diff --git a/package-lock.json b/package-lock.json index 1d91782b..26f30a23 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "keeweb", - "version": "1.11.6", + "version": "1.11.7", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index ff42e1da..7ab67a50 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "keeweb", - "version": "1.11.6", + "version": "1.11.7", "description": "Free cross-platform password manager compatible with KeePass", "main": "Gruntfile.js", "private": true, diff --git a/release-notes.md b/release-notes.md index 6e5fd4fd..035845aa 100644 --- a/release-notes.md +++ b/release-notes.md @@ -9,6 +9,10 @@ Release notes `+` #480: option to launch the app minimized `-` fix #1273: untranslated menu items +##### v1.11.7 (2019-10-08) +`-` fix #1289: crash on Auto sorting mode +`-` fix #1288: issues when opening a file during in auto-type mode + ##### v1.11.6 (2019-10-04) `-` fix #1285: issues in moving entries across files