Only QuickNav if there was a keyDown since shown (fixes #83013)

This commit is contained in:
Christof Marti 2019-11-12 11:27:34 +01:00
parent 5fbd6bbc56
commit 8faa1d52f1
2 changed files with 12 additions and 2 deletions

View file

@ -134,6 +134,7 @@ export class QuickOpenWidget extends Disposable implements IModelProvider {
private styles: IQuickOpenStyles;
// @ts-ignore (legacy widget - to be replaced with quick input)
private renderer: Renderer;
private keyDownSeenSinceShown = false;
constructor(container: HTMLElement, callbacks: IQuickOpenCallbacks, options: IQuickOpenOptions) {
super();
@ -170,6 +171,7 @@ export class QuickOpenWidget extends Disposable implements IModelProvider {
this._register(DOM.addDisposableListener(this.element, DOM.EventType.FOCUS, e => this.gainingFocus(), true));
this._register(DOM.addDisposableListener(this.element, DOM.EventType.BLUR, e => this.loosingFocus(e), true));
this._register(DOM.addDisposableListener(this.element, DOM.EventType.KEY_DOWN, e => {
this.keyDownSeenSinceShown = true;
const keyboardEvent: StandardKeyboardEvent = new StandardKeyboardEvent(e);
if (keyboardEvent.keyCode === KeyCode.Escape) {
DOM.EventHelper.stop(e, true);
@ -220,6 +222,7 @@ export class QuickOpenWidget extends Disposable implements IModelProvider {
this._register(DOM.addDisposableListener(this.inputBox.inputElement, DOM.EventType.INPUT, (e: Event) => this.onType()));
this._register(DOM.addDisposableListener(this.inputBox.inputElement, DOM.EventType.KEY_DOWN, (e: KeyboardEvent) => {
this.keyDownSeenSinceShown = true;
const keyboardEvent: StandardKeyboardEvent = new StandardKeyboardEvent(e);
const shouldOpenInBackground = this.shouldOpenInBackground(keyboardEvent);
@ -300,6 +303,7 @@ export class QuickOpenWidget extends Disposable implements IModelProvider {
}));
this._register(DOM.addDisposableListener(this.treeContainer, DOM.EventType.KEY_DOWN, e => {
this.keyDownSeenSinceShown = true;
const keyboardEvent: StandardKeyboardEvent = new StandardKeyboardEvent(e);
// Only handle when in quick navigation mode
@ -320,7 +324,7 @@ export class QuickOpenWidget extends Disposable implements IModelProvider {
const keyCode = keyboardEvent.keyCode;
// Only handle when in quick navigation mode
if (!this.quickNavigateConfiguration) {
if (!this.quickNavigateConfiguration || !this.keyDownSeenSinceShown) {
return;
}
@ -595,6 +599,7 @@ export class QuickOpenWidget extends Disposable implements IModelProvider {
this.visible = true;
this.isLoosingFocus = false;
this.quickNavigateConfiguration = options ? options.quickNavigateConfiguration : undefined;
this.keyDownSeenSinceShown = false;
// Adjust UI for quick navigate mode
if (this.quickNavigateConfiguration) {

View file

@ -84,6 +84,7 @@ interface QuickInputUI {
onDidTriggerButton: Event<IQuickInputButton>;
ignoreFocusOut: boolean;
keyMods: Writeable<IKeyMods>;
keyDownSeenSinceShown: boolean;
isScreenReaderOptimized(): boolean;
show(controller: QuickInput): void;
setVisibilities(visibilities: Visibilities): void;
@ -216,6 +217,7 @@ class QuickInput extends Disposable implements IQuickInput {
}
}),
);
this.ui.keyDownSeenSinceShown = false;
this.ui.show(this);
this.visible = true;
this.update();
@ -554,6 +556,7 @@ class QuickPick<T extends IQuickPickItem> extends QuickInput implements IQuickPi
}
}));
this.visibleDisposables.add(this.ui.inputBox.onKeyDown(event => {
this.ui.keyDownSeenSinceShown = true;
switch (event.keyCode) {
case KeyCode.DownArrow:
this.ui.list.focus('Next');
@ -652,7 +655,7 @@ class QuickPick<T extends IQuickPickItem> extends QuickInput implements IQuickPi
private registerQuickNavigation() {
return dom.addDisposableListener(this.ui.container, dom.EventType.KEY_UP, e => {
if (this.canSelectMany || !this.quickNavigate) {
if (this.canSelectMany || !this.quickNavigate || !this.ui.keyDownSeenSinceShown) {
return;
}
@ -1111,6 +1114,7 @@ export class QuickInputService extends Component implements IQuickInputService {
inputBox.setFocus();
}));
this._register(dom.addDisposableListener(container, dom.EventType.KEY_DOWN, (e: KeyboardEvent) => {
this.getUI().keyDownSeenSinceShown = true;
const event = new StandardKeyboardEvent(e);
switch (event.keyCode) {
case KeyCode.Enter:
@ -1172,6 +1176,7 @@ export class QuickInputService extends Component implements IQuickInputService {
onDidTriggerButton: this.onDidTriggerButtonEmitter.event,
ignoreFocusOut: false,
keyMods: this.keyMods,
keyDownSeenSinceShown: false,
isScreenReaderOptimized: () => this.isScreenReaderOptimized(),
show: controller => this.show(controller),
hide: () => this.hide(),