Skip to content

Commit 00d1ec8

Browse files
committed
1 parent f3c7479 commit 00d1ec8

6 files changed

Lines changed: 47 additions & 11 deletions

File tree

src/vs/platform/list/browser/listService.ts

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -601,15 +601,14 @@ export interface IResourceResultsNavigationOptions {
601601

602602
export class TreeResourceNavigator2<T, TFilterData> extends Disposable {
603603

604-
private readonly _openResource = new Emitter<IOpenEvent<T | null>>();
605-
readonly openResource: Event<IOpenEvent<T | null>> = this._openResource.event;
604+
private readonly _onDidOpenResource = new Emitter<IOpenEvent<T | null>>();
605+
readonly onDidOpenResource: Event<IOpenEvent<T | null>> = this._onDidOpenResource.event;
606606

607607
constructor(
608-
private tree: WorkbenchObjectTree<T, TFilterData> | WorkbenchAsyncDataTree<any, T, TFilterData>,
608+
private tree: WorkbenchObjectTree<T, TFilterData> | WorkbenchDataTree<any, T, TFilterData> | WorkbenchAsyncDataTree<any, T, TFilterData>,
609609
private options?: IResourceResultsNavigationOptions
610610
) {
611611
super();
612-
613612
this.registerListeners();
614613
}
615614

@@ -642,12 +641,15 @@ export class TreeResourceNavigator2<T, TFilterData> extends Disposable {
642641
}
643642

644643
const isDoubleClick = e.browserEvent.detail === 2;
645-
const sideBySide = e.browserEvent instanceof MouseEvent && (e.browserEvent.ctrlKey || e.browserEvent.metaKey || e.browserEvent.altKey);
646-
this.open(!isDoubleClick, isDoubleClick, sideBySide);
644+
645+
if (this.tree.openOnSingleClick || isDoubleClick) {
646+
const sideBySide = e.browserEvent instanceof MouseEvent && (e.browserEvent.ctrlKey || e.browserEvent.metaKey || e.browserEvent.altKey);
647+
this.open(!isDoubleClick, isDoubleClick, sideBySide);
648+
}
647649
}
648650

649651
private open(preserveFocus: boolean, pinned: boolean, sideBySide: boolean): void {
650-
this._openResource.fire({
652+
this._onDidOpenResource.fire({
651653
editorOptions: {
652654
preserveFocus,
653655
pinned,
@@ -904,6 +906,7 @@ export class WorkbenchObjectTree<T extends NonNullable<any>, TFilterData = void>
904906
private hasDoubleSelection: IContextKey<boolean>;
905907
private hasMultiSelection: IContextKey<boolean>;
906908

909+
private _openOnSingleClick: boolean;
907910
private _useAltAsMultipleSelectionModifier: boolean;
908911

909912
constructor(
@@ -940,6 +943,7 @@ export class WorkbenchObjectTree<T extends NonNullable<any>, TFilterData = void>
940943
this.hasDoubleSelection = WorkbenchListDoubleSelection.bindTo(this.contextKeyService);
941944
this.hasMultiSelection = WorkbenchListMultiSelection.bindTo(this.contextKeyService);
942945

946+
this._openOnSingleClick = useSingleClickToOpen(configurationService);
943947
this._useAltAsMultipleSelectionModifier = useAltAsMultipleSelectionModifier(configurationService);
944948

945949
this.disposables.push(
@@ -961,6 +965,9 @@ export class WorkbenchObjectTree<T extends NonNullable<any>, TFilterData = void>
961965
this.hasSelectionOrFocus.set(selection.length > 0 || focus.length > 0);
962966
}),
963967
configurationService.onDidChangeConfiguration(e => {
968+
if (e.affectsConfiguration(openModeSettingKey)) {
969+
this._openOnSingleClick = useSingleClickToOpen(configurationService);
970+
}
964971
if (e.affectsConfiguration(multiSelectModifierSettingKey)) {
965972
this._useAltAsMultipleSelectionModifier = useAltAsMultipleSelectionModifier(configurationService);
966973
}
@@ -979,6 +986,10 @@ export class WorkbenchObjectTree<T extends NonNullable<any>, TFilterData = void>
979986
);
980987
}
981988

989+
get openOnSingleClick(): boolean {
990+
return this._openOnSingleClick;
991+
}
992+
982993
get useAltAsMultipleSelectionModifier(): boolean {
983994
return this._useAltAsMultipleSelectionModifier;
984995
}
@@ -997,6 +1008,7 @@ export class WorkbenchDataTree<TInput, T, TFilterData = void> extends DataTree<T
9971008
private hasDoubleSelection: IContextKey<boolean>;
9981009
private hasMultiSelection: IContextKey<boolean>;
9991010

1011+
private _openOnSingleClick: boolean;
10001012
private _useAltAsMultipleSelectionModifier: boolean;
10011013

10021014
constructor(
@@ -1034,6 +1046,7 @@ export class WorkbenchDataTree<TInput, T, TFilterData = void> extends DataTree<T
10341046
this.hasDoubleSelection = WorkbenchListDoubleSelection.bindTo(this.contextKeyService);
10351047
this.hasMultiSelection = WorkbenchListMultiSelection.bindTo(this.contextKeyService);
10361048

1049+
this._openOnSingleClick = useSingleClickToOpen(configurationService);
10371050
this._useAltAsMultipleSelectionModifier = useAltAsMultipleSelectionModifier(configurationService);
10381051

10391052
this.disposables.push(
@@ -1055,6 +1068,9 @@ export class WorkbenchDataTree<TInput, T, TFilterData = void> extends DataTree<T
10551068
this.hasSelectionOrFocus.set(selection.length > 0 || focus.length > 0);
10561069
}),
10571070
configurationService.onDidChangeConfiguration(e => {
1071+
if (e.affectsConfiguration(openModeSettingKey)) {
1072+
this._openOnSingleClick = useSingleClickToOpen(configurationService);
1073+
}
10581074
if (e.affectsConfiguration(multiSelectModifierSettingKey)) {
10591075
this._useAltAsMultipleSelectionModifier = useAltAsMultipleSelectionModifier(configurationService);
10601076
}
@@ -1073,6 +1089,10 @@ export class WorkbenchDataTree<TInput, T, TFilterData = void> extends DataTree<T
10731089
);
10741090
}
10751091

1092+
get openOnSingleClick(): boolean {
1093+
return this._openOnSingleClick;
1094+
}
1095+
10761096
get useAltAsMultipleSelectionModifier(): boolean {
10771097
return this._useAltAsMultipleSelectionModifier;
10781098
}
@@ -1086,6 +1106,7 @@ export class WorkbenchAsyncDataTree<TInput, T, TFilterData = void> extends Async
10861106
private hasDoubleSelection: IContextKey<boolean>;
10871107
private hasMultiSelection: IContextKey<boolean>;
10881108

1109+
private _openOnSingleClick: boolean;
10891110
private _useAltAsMultipleSelectionModifier: boolean;
10901111

10911112
constructor(
@@ -1123,6 +1144,7 @@ export class WorkbenchAsyncDataTree<TInput, T, TFilterData = void> extends Async
11231144
this.hasDoubleSelection = WorkbenchListDoubleSelection.bindTo(this.contextKeyService);
11241145
this.hasMultiSelection = WorkbenchListMultiSelection.bindTo(this.contextKeyService);
11251146

1147+
this._openOnSingleClick = useSingleClickToOpen(configurationService);
11261148
this._useAltAsMultipleSelectionModifier = useAltAsMultipleSelectionModifier(configurationService);
11271149

11281150
this.disposables.push(
@@ -1144,6 +1166,9 @@ export class WorkbenchAsyncDataTree<TInput, T, TFilterData = void> extends Async
11441166
this.hasSelectionOrFocus.set(selection.length > 0 || focus.length > 0);
11451167
}),
11461168
configurationService.onDidChangeConfiguration(e => {
1169+
if (e.affectsConfiguration(openModeSettingKey)) {
1170+
this._openOnSingleClick = useSingleClickToOpen(configurationService);
1171+
}
11471172
if (e.affectsConfiguration(multiSelectModifierSettingKey)) {
11481173
this._useAltAsMultipleSelectionModifier = useAltAsMultipleSelectionModifier(configurationService);
11491174
}
@@ -1162,6 +1187,10 @@ export class WorkbenchAsyncDataTree<TInput, T, TFilterData = void> extends Async
11621187
);
11631188
}
11641189

1190+
get openOnSingleClick(): boolean {
1191+
return this._openOnSingleClick;
1192+
}
1193+
11651194
get useAltAsMultipleSelectionModifier(): boolean {
11661195
return this._useAltAsMultipleSelectionModifier;
11671196
}

src/vs/workbench/parts/debug/browser/loadedScriptsView.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -429,7 +429,7 @@ export class LoadedScriptsView extends ViewletPanel {
429429

430430
const loadedScriptsNavigator = new TreeResourceNavigator2(this.tree);
431431
this.disposables.push(loadedScriptsNavigator);
432-
this.disposables.push(loadedScriptsNavigator.openResource(e => {
432+
this.disposables.push(loadedScriptsNavigator.onDidOpenResource(e => {
433433
if (e.element instanceof BaseTreeItem) {
434434
const source = e.element.getSource();
435435
if (source && source.available) {

src/vs/workbench/parts/debug/electron-browser/callStackView.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ export class CallStackView extends ViewletPanel {
149149

150150
const callstackNavigator = new TreeResourceNavigator2(this.tree);
151151
this.disposables.push(callstackNavigator);
152-
this.disposables.push(callstackNavigator.openResource(e => {
152+
this.disposables.push(callstackNavigator.onDidOpenResource(e => {
153153
if (this.ignoreSelectionChangedEvent) {
154154
return;
155155
}

src/vs/workbench/parts/files/electron-browser/views/explorerView.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,8 @@ export class ExplorerView extends ViewletPanel {
289289
this.rootContext.set(!stat || (stat && stat.isRoot));
290290
}));
291291

292+
// TODO@Isidor: use TreeResourceNavigator2 just like search and listen to the `onDidOpenResource` instead
293+
292294
// Open when selecting via keyboard
293295
this.disposables.push(this.tree.onDidChangeSelection(e => {
294296
if (!e.browserEvent) {
@@ -318,6 +320,11 @@ export class ExplorerView extends ViewletPanel {
318320

319321
if (e.browserEvent instanceof MouseEvent) {
320322
isDoubleClick = e.browserEvent.detail === 2;
323+
324+
if (!this.tree.openOnSingleClick && !isDoubleClick) {
325+
return;
326+
}
327+
321328
isMiddleClick = e.browserEvent.button === 1;
322329
sideBySide = this.tree.useAltAsMultipleSelectionModifier ? (e.browserEvent.ctrlKey || e.browserEvent.metaKey) : e.browserEvent.altKey;
323330
}

src/vs/workbench/parts/markers/electron-browser/markersPanel.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,7 @@ export class MarkersPanel extends Panel implements IMarkerFilterController {
354354
}));
355355

356356
const markersNavigator = this._register(new TreeResourceNavigator2(this.tree, { openOnFocus: true }));
357-
this._register(Event.debounce(markersNavigator.openResource, (last, event) => event, 75, true)(options => {
357+
this._register(Event.debounce(markersNavigator.onDidOpenResource, (last, event) => event, 75, true)(options => {
358358
this.openFileAtElement(options.element, options.editorOptions.preserveFocus, options.sideBySide, options.editorOptions.pinned);
359359
}));
360360
this._register(this.tree.onDidChangeCollapseState(({ node }) => {

src/vs/workbench/parts/search/browser/searchView.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -638,7 +638,7 @@ export class SearchView extends Viewlet implements IViewlet, IPanel {
638638
this._register(this.tree.onContextMenu(e => this.onContextMenu(e)));
639639

640640
const resourceNavigator = this._register(new TreeResourceNavigator2(this.tree, { openOnFocus: true }));
641-
this._register(Event.debounce(resourceNavigator.openResource, (last, event) => event, 75, true)(options => {
641+
this._register(Event.debounce(resourceNavigator.onDidOpenResource, (last, event) => event, 75, true)(options => {
642642
if (options.element instanceof Match) {
643643
const selectedMatch: Match = options.element;
644644
if (this.currentSelectedFileMatch) {

0 commit comments

Comments
 (0)