xP: deal with macOS/Blink for good

This commit is contained in:
Přemysl Eric Janouch 2022-09-12 16:43:13 +02:00
parent 8968100a28
commit a61789637a
Signed by: p
GPG Key ID: A0420B94F92B9493
1 changed files with 18 additions and 7 deletions

View File

@ -132,13 +132,9 @@ class RelayRpc extends EventTarget {
function utf8Encode(s) { return new TextEncoder().encode(s) }
function utf8Decode(s) { return new TextDecoder().decode(s) }
// On macOS, the Alt/Option key transforms characters, which basically breaks
// all event.altKey shortcuts, so require combining them with Control as well
// on that system.
function hasShortcutModifiers(event) {
// This method of detection only works with Blink browsers, as of writing.
return event.altKey && !event.metaKey &&
(navigator.userAgentData?.platform === 'macOS') === event.ctrlKey
return (event.altKey || event.escapePrefix) &&
!event.metaKey && !event.ctrlKey
}
const audioContext = new AudioContext()
@ -826,7 +822,22 @@ document.addEventListener('visibilitychange', event => {
}
})
// On macOS, the Alt/Option key transforms characters, which basically breaks
// all event.altKey shortcuts, so implement Escape prefixing on that system.
// This method of detection only works with Blink browsers, as of writing.
let lastWasEscape = false
document.addEventListener('keydown', event => {
event.escapePrefix = lastWasEscape
if (lastWasEscape) {
lastWasEscape = false
} else if (event.code == 'Escape' &&
navigator.userAgentData?.platform === 'macOS') {
event.preventDefault()
event.stopPropagation()
lastWasEscape = true
return
}
if (rpc.ws == undefined || !hasShortcutModifiers(event))
return
@ -874,4 +885,4 @@ document.addEventListener('keydown', event => {
}
event.preventDefault()
})
}, true)