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;