Do not respond to right alt (Alt Gr) keyboard events.

On some keyboard layouts (eg. pl) the right alt key (a.k.a. Alt Gr) is
used in combination with letters to type special characters, eg. AltGr-C
makes a 'ć' on a pl keyboard layout.

At least on Firefox on macOS it seems like events that would otherwise
result in a special character still get passed to keydown and friends.
This means that if etherpad handles alt-c, it might swallow someone's
intent to type in 'ć' and instead open up the chat window.

This could arguably be a bug in Firefox or macOS, as the same doesn't
happen in Firefox on Linux/X11. But before I bring the discussion to a
wider audience I'd like to at least make the issue go away at etherpad
level.
This commit is contained in:
q3k 2025-05-21 12:54:38 +02:00 committed by Serge Bazanski
parent 3bf147ccd2
commit d0ce905d1b

View file

@ -2526,7 +2526,15 @@ function Ace2Inner(editorInfo, cssManagers) {
const handleKeyEvent = (evt) => { const handleKeyEvent = (evt) => {
if (!isEditable) return; if (!isEditable) return;
const {type, charCode, keyCode, which, altKey, shiftKey} = evt; const {type, charCode, keyCode, which, shiftKey} = evt;
// If DOM3 support exists, ensure that the left ALT key was pressed. This
// allows keyboard layouts with special meaning for right-alt-char to
// continue working on Firefox / macOS.
let altKey = evt.altKey;
if (evt.originalEvent.location !== undefined) {
altKey = altKey && evt.originalEvent.location === evt.originalEvent.DOM_KEY_LOCATION_LEFT;
}
// Don't take action based on modifier keys going up and down. // Don't take action based on modifier keys going up and down.
// Modifier keys do not generate "keypress" events. // Modifier keys do not generate "keypress" events.