Merge pull request #2343 from Tyriar/cancel_events

Cancel keydown events when not in screenReaderMode
This commit is contained in:
Daniel Imms
2019-07-25 10:19:53 -07:00
committed by GitHub
2 changed files with 21 additions and 29 deletions
+11 -28
View File
@@ -556,16 +556,12 @@ describe('Terminal', () => {
afterEach(() => term.browser.isMac = originalIsMac);
it('should interfere with the alt key on keyDown', () => {
(<any>term)._keyDownHandled = false;
evKeyDown.altKey = true;
evKeyDown.keyCode = 81;
term.keyDown(evKeyDown);
assert.equal((<any>term)._keyDownHandled, true);
(<any>term)._keyDownHandled = false;
assert.equal(term.keyDown(evKeyDown), false);
evKeyDown.altKey = true;
evKeyDown.keyCode = 192;
term.keyDown(evKeyDown);
assert.equal((<any>term)._keyDownHandled, true);
assert.equal(term.keyDown(evKeyDown), false);
});
});
@@ -578,29 +574,22 @@ describe('Terminal', () => {
afterEach(() => term.browser.isMac = originalIsMac);
it('should not interfere with the alt key on keyDown', () => {
(<any>term)._keyDownHandled = false;
evKeyDown.altKey = true;
evKeyDown.keyCode = 81;
term.keyDown(evKeyDown);
assert.equal((<any>term)._keyDownHandled, false);
(<any>term)._keyDownHandled = false;
assert.equal(term.keyDown(evKeyDown), true);
evKeyDown.altKey = true;
evKeyDown.keyCode = 192;
term.keyDown(evKeyDown);
assert.equal((<any>term)._keyDownHandled, false);
assert.equal(term.keyDown(evKeyDown), true);
});
it('should interfere with the alt + arrow keys', () => {
(<any>term)._keyDownHandled = false;
evKeyDown.altKey = true;
evKeyDown.keyCode = 37;
term.keyDown(evKeyDown);
assert.equal((<any>term)._keyDownHandled, true);
(<any>term)._keyDownHandled = false;
assert.equal(term.keyDown(evKeyDown), false);
evKeyDown.altKey = true;
evKeyDown.keyCode = 39;
term.keyDown(evKeyDown);
assert.equal((<any>term)._keyDownHandled, true);
assert.equal(term.keyDown(evKeyDown), false);
});
it('should emit key with alt + key on keyPress', (done) => {
@@ -652,32 +641,26 @@ describe('Terminal', () => {
afterEach(() => term.browser.isWindows = originalIsWindows);
it('should not interfere with the alt + ctrl key on keyDown', () => {
(<any>term)._keyDownHandled = false;
evKeyPress.altKey = true;
evKeyPress.ctrlKey = true;
evKeyPress.keyCode = 81;
term.keyDown(evKeyPress);
assert.equal((<any>term)._keyDownHandled, false);
(<any>term)._keyDownHandled = false;
assert.equal(term.keyDown(evKeyPress), true);
evKeyDown.altKey = true;
evKeyDown.ctrlKey = true;
evKeyDown.keyCode = 81;
term.keyDown(evKeyDown);
assert.equal((<any>term)._keyDownHandled, false);
assert.equal(term.keyDown(evKeyPress), true);
});
it('should interefere with the alt + ctrl + arrow keys', () => {
it('should interfere with the alt + ctrl + arrow keys', () => {
evKeyDown.altKey = true;
evKeyDown.ctrlKey = true;
(<any>term)._keyDownHandled = false;
evKeyDown.keyCode = 37;
term.keyDown(evKeyDown);
assert.equal((<any>term)._keyDownHandled, true);
(<any>term)._keyDownHandled = false;
assert.equal(term.keyDown(evKeyDown), false);
evKeyDown.keyCode = 39;
term.keyDown(evKeyDown);
assert.equal((<any>term)._keyDownHandled, true);
assert.equal(term.keyDown(evKeyDown), false);
});
it('should emit key with alt + ctrl + key on keyPress', (done) => {
+10 -1
View File
@@ -1568,10 +1568,19 @@ export class Terminal extends Disposable implements ITerminal, IDisposable, IInp
this.textarea.value = '';
}
this._keyDownHandled = true;
this._onKey.fire({ key: result.key, domEvent: event });
this.showCursor();
this._coreService.triggerDataEvent(result.key, true);
// Cancel events when not in screen reader mode so events don't get bubbled up and handled by
// other listeners. When screen reader mode is enabled, this could cause issues if the event
// is handled at a higher level, this is a compromise in order to echo keys to the screen
// reader.
if (!this.optionsService.options.screenReaderMode) {
return this.cancel(event, true);
}
this._keyDownHandled = true;
}
private _isThirdLevelShift(browser: IBrowser, ev: IKeyboardEvent): boolean {