diff --git a/app/Application.js b/app/Application.js index 23138070..a8195530 100644 --- a/app/Application.js +++ b/app/Application.js @@ -24,7 +24,6 @@ Ext.define('Rambox.Application', { totalServicesLoaded: 0 ,totalNotifications: 0 } - ,launch: function () { // Prevent track if the user have disabled this option (default: false) if ( !ipc.sendSync('sendStatistics') ) { @@ -60,7 +59,7 @@ Ext.define('Rambox.Application', { if ( require('electron').remote.process.argv.indexOf('--without-update') === -1 ) Rambox.app.checkUpdate(true); // Add shortcuts to switch services using CTRL + Number - var map = new Ext.util.KeyMap({ + document.keyMapping = new Ext.util.KeyMap({ target: document ,binding: [ { diff --git a/app/ux/WebView.js b/app/ux/WebView.js index adeb9d13..a35b0a0c 100644 --- a/app/ux/WebView.js +++ b/app/ux/WebView.js @@ -454,6 +454,29 @@ Ext.define('Rambox.ux.WebView',{ webview.executeJavaScript(js_inject); }); + webview.getWebContents().on('before-input-event', (event, input) => { + if (input.type !== 'keyDown') { // event used by default + return; + } + // because keyCode property is not passed + const keycode = require('keycodes') + // Create a fake KeyboardEvent from the data provided + var emulatedKeyboardEvent = new KeyboardEvent('keydown', { + code: input.code, + key: input.key, + shiftKey: input.shift, + altKey: input.alt, + ctrlKey: input.control, + metaKey: input.meta, + repeat: input.isAutoRepeat, + keyCode: keycode(input.key) //get real key code + }); + emulatedKeyboardEvent.getKey = function() { + return this.keyCode || this.charCode // fake function, normally used by Ext.js, simply returning keyCode + } + document.keyMapping.handleTargetEvent(emulatedKeyboardEvent) // we directly trigger handleTargetEvent. That's a private method normally. We can't fire the event directly with document.dispatch, unfortunately + + }); webview.addEventListener('ipc-message', function(event) { var channel = event.channel; diff --git a/package-lock.json b/package-lock.json index 8a7d1254..0687a9a7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "Rambox", - "version": "0.6.3", + "version": "0.6.4", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -1862,7 +1862,7 @@ }, "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, @@ -3105,6 +3105,11 @@ "verror": "1.10.0" } }, + "keycodes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/keycodes/-/keycodes-1.0.0.tgz", + "integrity": "sha512-ukEttiO9Sjb/dj29GQw3/mVXyI3575QTtvetCJfBrVjytESKefRHCt7GUmruvFwWIUqvMD9p5uk7Y3y//4B+hw==" + }, "klaw": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", diff --git a/package.json b/package.json index aedf6ef1..28098a78 100644 --- a/package.json +++ b/package.json @@ -189,6 +189,7 @@ "electron-log": "^2.2.17", "electron-store": "^2.0.0", "electron-updater": "^3.1.2", + "keycodes": "^1.0.0", "mime": "^2.3.1", "request": "^2.88.0", "request-promise": "^4.2.2",