(e)
| 212 | } |
| 213 | |
| 214 | _handleKeyUp(e) { |
| 215 | stopEvent(e); |
| 216 | |
| 217 | const code = this._getKeyCode(e); |
| 218 | |
| 219 | // We can't get a release in the middle of an AltGr sequence, so |
| 220 | // abort that detection |
| 221 | this._interruptAltGrSequence(); |
| 222 | |
| 223 | // See comment in _handleKeyDown() |
| 224 | if ((browser.isMac() || browser.isIOS()) && (code === 'CapsLock')) { |
| 225 | this._sendKeyEvent(KeyTable.XK_Caps_Lock, 'CapsLock', true); |
| 226 | this._sendKeyEvent(KeyTable.XK_Caps_Lock, 'CapsLock', false); |
| 227 | return; |
| 228 | } |
| 229 | |
| 230 | this._sendKeyEvent(this._keyDownList[code], code, false); |
| 231 | |
| 232 | // Windows has a rather nasty bug where it won't send key |
| 233 | // release events for a Shift button if the other Shift is still |
| 234 | // pressed |
| 235 | if (browser.isWindows() && ((code === 'ShiftLeft') || |
| 236 | (code === 'ShiftRight'))) { |
| 237 | if ('ShiftRight' in this._keyDownList) { |
| 238 | this._sendKeyEvent(this._keyDownList['ShiftRight'], |
| 239 | 'ShiftRight', false); |
| 240 | } |
| 241 | if ('ShiftLeft' in this._keyDownList) { |
| 242 | this._sendKeyEvent(this._keyDownList['ShiftLeft'], |
| 243 | 'ShiftLeft', false); |
| 244 | } |
| 245 | } |
| 246 | } |
| 247 | |
| 248 | _interruptAltGrSequence() { |
| 249 | if (this._altGrArmed) { |
nothing calls this directly
no test coverage detected