From 2d1aec3ccfffdbe29d57afa75950554fe409fc41 Mon Sep 17 00:00:00 2001 From: Rob Lourens Date: Wed, 3 Jul 2019 12:05:05 -0700 Subject: [PATCH] Fix #74142 Get rid of the "current match" debouncer because now the selection and focus are synced by the navigator anyway, and that's fine. Now the only debounce is on the open event coming from the navigator. Also, change the navigator onFocus to respect the browserEvent's preserveFocus which should be ok --- src/vs/platform/list/browser/listService.ts | 6 +++++- .../contrib/search/browser/searchView.ts | 15 +-------------- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/src/vs/platform/list/browser/listService.ts b/src/vs/platform/list/browser/listService.ts index c885cca5e51..3847287678b 100644 --- a/src/vs/platform/list/browser/listService.ts +++ b/src/vs/platform/list/browser/listService.ts @@ -719,7 +719,11 @@ export class TreeResourceNavigator2 extends Disposable { const isMouseEvent = e.browserEvent && e.browserEvent instanceof MouseEvent; if (!isMouseEvent) { - this.open(true, false, false, e.browserEvent); + const preserveFocus = (e.browserEvent instanceof KeyboardEvent && typeof (e.browserEvent).preserveFocus === 'boolean') ? + !!(e.browserEvent).preserveFocus : + true; + + this.open(preserveFocus, false, false, e.browserEvent); } } diff --git a/src/vs/workbench/contrib/search/browser/searchView.ts b/src/vs/workbench/contrib/search/browser/searchView.ts index 242447cfc92..77335ea480e 100644 --- a/src/vs/workbench/contrib/search/browser/searchView.ts +++ b/src/vs/workbench/contrib/search/browser/searchView.ts @@ -12,7 +12,7 @@ import { ITreeContextMenuEvent, ITreeElement } from 'vs/base/browser/ui/tree/tre import { IAction } from 'vs/base/common/actions'; import { Delayer } from 'vs/base/common/async'; import * as errors from 'vs/base/common/errors'; -import { Emitter, Event } from 'vs/base/common/event'; +import { Event } from 'vs/base/common/event'; import { Iterator } from 'vs/base/common/iterator'; import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; import { dispose, IDisposable } from 'vs/base/common/lifecycle'; @@ -117,7 +117,6 @@ export class SearchView extends ViewletPanel { private currentSelectedFileMatch: FileMatch | undefined; - private readonly selectCurrentMatchEmitter: Emitter; private delayedRefresh: Delayer; private changedWhileHidden: boolean; @@ -175,10 +174,6 @@ export class SearchView extends ViewletPanel { this._register(this.contextService.onDidChangeWorkbenchState(() => this.onDidChangeWorkbenchState())); this._register(this.searchHistoryService.onDidClearHistory(() => this.clearHistory())); - this.selectCurrentMatchEmitter = this._register(new Emitter()); - this._register(Event.debounce(this.selectCurrentMatchEmitter.event, (l, e) => e, 100, /*leading=*/true) - (() => this.selectCurrentMatch())); - this.delayedRefresh = this._register(new Delayer(250)); this.actions = [ @@ -702,12 +697,6 @@ export class SearchView extends ViewletPanel { }); } - selectCurrentMatch(): void { - const focused = this.tree.getFocus()[0]; - const fakeKeyboardEvent = getSelectionKeyboardEvent(undefined, false); - this.tree.setSelection([focused], fakeKeyboardEvent); - } - selectNextMatch(): void { const [selected] = this.tree.getSelection(); @@ -741,7 +730,6 @@ export class SearchView extends ViewletPanel { if (next) { this.tree.setFocus([next], getSelectionKeyboardEvent(undefined, false)); this.tree.reveal(next); - this.selectCurrentMatchEmitter.fire(undefined); } } @@ -781,7 +769,6 @@ export class SearchView extends ViewletPanel { if (prev) { this.tree.setFocus([prev], getSelectionKeyboardEvent(undefined, false)); this.tree.reveal(prev); - this.selectCurrentMatchEmitter.fire(undefined); } }