mirror of
https://github.com/kasmtech/KasmVNC.git
synced 2025-06-26 12:41:31 +02:00
Send NumLock on macOS, even though the key is Clear
There is no obvious choice what works best here, but this is what TigerVNC has been doing for years without complaints. Let's follow them until we get reports that this doesn't work well.
This commit is contained in:
parent
6916c83b48
commit
796de9653f
@ -156,6 +156,14 @@ export function getKeysym(evt) {
|
|||||||
location = 2;
|
location = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// And for Clear
|
||||||
|
if ((key === 'Clear') && (location === 3)) {
|
||||||
|
let code = getKeycode(evt);
|
||||||
|
if (code === 'NumLock') {
|
||||||
|
location = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ((location === undefined) || (location > 3)) {
|
if ((location === undefined) || (location > 3)) {
|
||||||
location = 0;
|
location = 0;
|
||||||
}
|
}
|
||||||
@ -172,6 +180,15 @@ export function getKeysym(evt) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// macOS has Clear instead of NumLock, but the remote system is
|
||||||
|
// probably not macOS, so lying here is probably best...
|
||||||
|
if (key === 'Clear') {
|
||||||
|
let code = getKeycode(evt);
|
||||||
|
if (code === 'NumLock') {
|
||||||
|
return KeyTable.XK_Num_Lock;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return DOMKeyTable[key][location];
|
return DOMKeyTable[key][location];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -205,12 +205,22 @@ describe('Helpers', function () {
|
|||||||
expect(KeyboardUtil.getKeysym({code: 'AltRight', key: 'Alt', location: 2})).to.be.equal(0xFFEA);
|
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);
|
expect(KeyboardUtil.getKeysym({code: 'AltRight', key: 'AltGraph', location: 2})).to.be.equal(0xFE03);
|
||||||
});
|
});
|
||||||
|
it('should handle Windows key with incorrect location', function () {
|
||||||
|
expect(KeyboardUtil.getKeysym({key: 'Meta', location: 0})).to.be.equal(0xFFEC);
|
||||||
|
});
|
||||||
|
it('should handle Clear/NumLock key with incorrect location', function () {
|
||||||
|
this.skip(); // Broken because of Clear/NumLock override
|
||||||
|
expect(KeyboardUtil.getKeysym({key: 'Clear', code: 'NumLock', location: 3})).to.be.equal(0xFF0B);
|
||||||
|
});
|
||||||
it('should handle Meta/Windows distinction', function () {
|
it('should handle Meta/Windows distinction', function () {
|
||||||
expect(KeyboardUtil.getKeysym({code: 'AltLeft', key: 'Meta', location: 1})).to.be.equal(0xFFE7);
|
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: '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: 'MetaLeft', key: 'Meta', location: 1})).to.be.equal(0xFFEB);
|
||||||
expect(KeyboardUtil.getKeysym({code: 'MetaRight', key: 'Meta', location: 2})).to.be.equal(0xFFEC);
|
expect(KeyboardUtil.getKeysym({code: 'MetaRight', key: 'Meta', location: 2})).to.be.equal(0xFFEC);
|
||||||
});
|
});
|
||||||
|
it('should send NumLock even if key is Clear', function () {
|
||||||
|
expect(KeyboardUtil.getKeysym({key: 'Clear', code: 'NumLock'})).to.be.equal(0xFF7F);
|
||||||
|
});
|
||||||
it('should return null for unknown keys', function () {
|
it('should return null for unknown keys', function () {
|
||||||
expect(KeyboardUtil.getKeysym({key: 'Semicolon'})).to.be.null;
|
expect(KeyboardUtil.getKeysym({key: 'Semicolon'})).to.be.null;
|
||||||
expect(KeyboardUtil.getKeysym({key: 'BracketRight'})).to.be.null;
|
expect(KeyboardUtil.getKeysym({key: 'BracketRight'})).to.be.null;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user