Skip to content

Commit

Permalink
Handle CapsLock on macOS
Browse files Browse the repository at this point in the history
Modifiers behave a bit oddly on macOS, causing weird CapsLock events
to be sent by the browsers.
  • Loading branch information
CendioOssman committed May 4, 2017
1 parent bf43c26 commit 634cc1b
Showing 1 changed file with 18 additions and 0 deletions.
18 changes: 18 additions & 0 deletions core/input/devices.js
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,17 @@ Keyboard.prototype = {
keysym = this._keyDownList[code];
}

// macOS doesn't send proper key events for modifiers, only
// state change events. That gets extra confusing for CapsLock
// which toggles on each press, but not on release. So pretend
// it was a quick press and release of the button.
if (isMac() && (code === 'CapsLock')) {
this._sendKeyEvent(KeyTable.XK_Caps_Lock, 'CapsLock', true);
this._sendKeyEvent(KeyTable.XK_Caps_Lock, 'CapsLock', false);
stopEvent(e);
return;
}

// If this is a legacy browser then we'll need to wait for
// a keypress event as well
if (!keysym) {
Expand Down Expand Up @@ -200,6 +211,13 @@ Keyboard.prototype = {

var code = this._getKeyCode(e);

// See comment in _handleKeyDown()
if (isMac() && (code === 'CapsLock')) {
this._sendKeyEvent(KeyTable.XK_Caps_Lock, 'CapsLock', true);
this._sendKeyEvent(KeyTable.XK_Caps_Lock, 'CapsLock', false);
return;
}

// Do we really think this key is down?
if (!(code in this._keyDownList)) {
return;
Expand Down

0 comments on commit 634cc1b

Please sign in to comment.