From 7dc51fa7a533baadbcf25450bbf59e4345ead2a0 Mon Sep 17 00:00:00 2001 From: Pierre Ossman Date: Thu, 31 Oct 2019 14:07:30 +0100 Subject: [PATCH] Try to handle Meta key properly The standards have unfortunatly caused some confusion between the Windows key and the original Meta key. Try to handle the common case sanely at least. --- kasmweb/core/input/util.js | 13 +++++++++++++ kasmweb/tests/test.helper.js | 6 ++++++ 2 files changed, 19 insertions(+) diff --git a/kasmweb/core/input/util.js b/kasmweb/core/input/util.js index f177ef5..179f7ee 100644 --- a/kasmweb/core/input/util.js +++ b/kasmweb/core/input/util.js @@ -1,3 +1,4 @@ +import KeyTable from "./keysym.js"; import keysyms from "./keysymdef.js"; import vkeys from "./vkeys.js"; import fixedkeys from "./fixedkeys.js"; @@ -145,6 +146,18 @@ export function getKeysym(evt) { location = 0; } + // The original Meta key now gets confused with the Windows key + // https://bugs.chromium.org/p/chromium/issues/detail?id=1020141 + // https://bugzilla.mozilla.org/show_bug.cgi?id=1232918 + if (key === 'Meta') { + let code = getKeycode(evt); + if (code === 'AltLeft') { + return KeyTable.XK_Meta_L; + } else if (code === 'AltRight') { + return KeyTable.XK_Meta_R; + } + } + return DOMKeyTable[key][location]; } diff --git a/kasmweb/tests/test.helper.js b/kasmweb/tests/test.helper.js index d44bab0..5b58a83 100644 --- a/kasmweb/tests/test.helper.js +++ b/kasmweb/tests/test.helper.js @@ -192,6 +192,12 @@ describe('Helpers', function () { expect(KeyboardUtil.getKeysym({code: 'AltRight', key: 'Alt', location: 2})).to.be.equal(0xFFEA); expect(KeyboardUtil.getKeysym({code: 'AltRight', key: 'AltGraph', location: 2})).to.be.equal(0xFE03); }); + it('should handle Meta/Windows distinction', function () { + expect(KeyboardUtil.getKeysym({code: 'AltLeft', key: 'Meta', location: 1})).to.be.equal(0xFFE7); + expect(KeyboardUtil.getKeysym({code: 'AltRight', key: 'Meta', location: 2})).to.be.equal(0xFFE8); + expect(KeyboardUtil.getKeysym({code: 'MetaLeft', key: 'Meta', location: 1})).to.be.equal(0xFFEB); + expect(KeyboardUtil.getKeysym({code: 'MetaRight', key: 'Meta', location: 2})).to.be.equal(0xFFEC); + }); it('should return null for unknown keys', function () { expect(KeyboardUtil.getKeysym({key: 'Semicolon'})).to.be.null; expect(KeyboardUtil.getKeysym({key: 'BracketRight'})).to.be.null;