]> git.proxmox.com Git - mirror_novnc.git/commitdiff
Try to handle Meta key properly
authorPierre Ossman <ossman@cendio.se>
Thu, 31 Oct 2019 13:07:30 +0000 (14:07 +0100)
committerPierre Ossman <ossman@cendio.se>
Thu, 31 Oct 2019 13:12:58 +0000 (14:12 +0100)
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.

core/input/util.js
tests/test.helper.js

index f177ef53d36ca9408807c0472fd72de4fd1c7fd2..179f7ee285c07f7c8ecc31ab33696292c9af889b 100644 (file)
@@ -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];
     }
 
index d44bab0fe2dc58b0559372c36617634dc61bb066..5b58a83103c96a385e8f3bc3b0125c27d152da61 100644 (file)
@@ -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;