Merge branch 'master' into mouse_services

This commit is contained in:
Jörg Breitbart
2019-07-31 23:12:05 +02:00
7 changed files with 2324 additions and 95 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) => {
+16 -2
View File
@@ -261,12 +261,17 @@ export class Terminal extends Disposable implements ITerminal, IDisposable, IInp
}
public dispose(): void {
if (this._isDisposed) {
return;
}
super.dispose();
if (this._windowsMode) {
this._windowsMode.dispose();
this._windowsMode = undefined;
}
this._renderService.dispose();
if (this._renderService) {
this._renderService.dispose();
}
this._customKeyEventHandler = null;
this.write = () => {};
if (this.element && this.element.parentNode) {
@@ -1486,10 +1491,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 {