diff --git a/src/vs/base/browser/ui/tree/abstractTree.ts b/src/vs/base/browser/ui/tree/abstractTree.ts index c5640d99420..ce8d7dc4e71 100644 --- a/src/vs/base/browser/ui/tree/abstractTree.ts +++ b/src/vs/base/browser/ui/tree/abstractTree.ts @@ -672,6 +672,7 @@ export interface IAbstractTreeOptionsUpdate extends ITreeRendererOptions { readonly automaticKeyboardNavigation?: boolean; readonly simpleKeyboardNavigation?: boolean; readonly filterOnType?: boolean; + readonly openOnSingleClick?: boolean; } export interface IAbstractTreeOptions extends IAbstractTreeOptionsUpdate, IListOptions { @@ -842,6 +843,7 @@ export abstract class AbstractTree implements IDisposable readonly onWillRefilter: Event = this._onWillRefilter.event; get filterOnType(): boolean { return !!this._options.filterOnType; } + get openOnSingleClick(): boolean { return typeof this._options.openOnSingleClick === 'undefined' ? true : this._options.openOnSingleClick; } get onDidDispose(): Event { return this.view.onDidDispose; } @@ -1156,6 +1158,10 @@ export abstract class AbstractTree implements IDisposable return; } + if (!this.openOnSingleClick && e.browserEvent.detail !== 2) { + return; + } + const location = this.model.getNodeLocation(node); const recursive = e.browserEvent.altKey; diff --git a/src/vs/base/browser/ui/tree/asyncDataTree.ts b/src/vs/base/browser/ui/tree/asyncDataTree.ts index 4467d58769f..bfe2b0e6161 100644 --- a/src/vs/base/browser/ui/tree/asyncDataTree.ts +++ b/src/vs/base/browser/ui/tree/asyncDataTree.ts @@ -287,6 +287,7 @@ export class AsyncDataTree implements IDisposable get onDidBlur(): Event { return this.tree.onDidBlur; } get filterOnType(): boolean { return this.tree.filterOnType; } + get openOnSingleClick(): boolean { return this.tree.openOnSingleClick; } get onDidDispose(): Event { return this.tree.onDidDispose; } diff --git a/src/vs/platform/list/browser/listService.ts b/src/vs/platform/list/browser/listService.ts index e3ac00702cd..9a6688e2d15 100644 --- a/src/vs/platform/list/browser/listService.ts +++ b/src/vs/platform/list/browser/listService.ts @@ -909,7 +909,6 @@ export class WorkbenchObjectTree, TFilterData = void> private hasDoubleSelection: IContextKey; private hasMultiSelection: IContextKey; - private _openOnSingleClick: boolean; private _useAltAsMultipleSelectionModifier: boolean; constructor( @@ -929,6 +928,7 @@ export class WorkbenchObjectTree, TFilterData = void> const automaticKeyboardNavigation = contextKeyService.getContextKeyValue(WorkbenchListAutomaticKeyboardNavigationKey); const keyboardNavigation = configurationService.getValue(keyboardNavigationSettingKey); const horizontalScrolling = typeof options.horizontalScrolling !== 'undefined' ? options.horizontalScrolling : configurationService.getValue(horizontalScrollingKey); + const openOnSingleClick = useSingleClickToOpen(configurationService); super(container, delegate, renderers, { keyboardSupport: false, @@ -939,7 +939,8 @@ export class WorkbenchObjectTree, TFilterData = void> automaticKeyboardNavigation, simpleKeyboardNavigation: keyboardNavigation === 'simple', filterOnType: keyboardNavigation === 'filter', - horizontalScrolling + horizontalScrolling, + openOnSingleClick }); this.contextKeyService = createScopedContextKeyService(contextKeyService, this); @@ -951,7 +952,6 @@ export class WorkbenchObjectTree, TFilterData = void> this.hasDoubleSelection = WorkbenchListDoubleSelection.bindTo(this.contextKeyService); this.hasMultiSelection = WorkbenchListMultiSelection.bindTo(this.contextKeyService); - this._openOnSingleClick = useSingleClickToOpen(configurationService); this._useAltAsMultipleSelectionModifier = useAltAsMultipleSelectionModifier(configurationService); const interestingContextKeys = new Set(); @@ -977,7 +977,7 @@ export class WorkbenchObjectTree, TFilterData = void> }), configurationService.onDidChangeConfiguration(e => { if (e.affectsConfiguration(openModeSettingKey)) { - this._openOnSingleClick = useSingleClickToOpen(configurationService); + this.updateOptions({ openOnSingleClick: useSingleClickToOpen(configurationService) }); } if (e.affectsConfiguration(multiSelectModifierSettingKey)) { this._useAltAsMultipleSelectionModifier = useAltAsMultipleSelectionModifier(configurationService); @@ -1005,10 +1005,6 @@ export class WorkbenchObjectTree, TFilterData = void> ); } - get openOnSingleClick(): boolean { - return this._openOnSingleClick; - } - get useAltAsMultipleSelectionModifier(): boolean { return this._useAltAsMultipleSelectionModifier; } @@ -1027,7 +1023,6 @@ export class WorkbenchDataTree extends DataTree; private hasMultiSelection: IContextKey; - private _openOnSingleClick: boolean; private _useAltAsMultipleSelectionModifier: boolean; constructor( @@ -1048,6 +1043,7 @@ export class WorkbenchDataTree extends DataTree(WorkbenchListAutomaticKeyboardNavigationKey); const keyboardNavigation = configurationService.getValue(keyboardNavigationSettingKey); const horizontalScrolling = typeof options.horizontalScrolling !== 'undefined' ? options.horizontalScrolling : configurationService.getValue(horizontalScrollingKey); + const openOnSingleClick = useSingleClickToOpen(configurationService); super(container, delegate, renderers, dataSource, { keyboardSupport: false, @@ -1058,7 +1054,8 @@ export class WorkbenchDataTree extends DataTree extends DataTree extends DataTree { if (e.affectsConfiguration(openModeSettingKey)) { - this._openOnSingleClick = useSingleClickToOpen(configurationService); + this.updateOptions({ openOnSingleClick: useSingleClickToOpen(configurationService) }); } if (e.affectsConfiguration(multiSelectModifierSettingKey)) { this._useAltAsMultipleSelectionModifier = useAltAsMultipleSelectionModifier(configurationService); @@ -1124,10 +1120,6 @@ export class WorkbenchDataTree extends DataTree extends Async private hasDoubleSelection: IContextKey; private hasMultiSelection: IContextKey; - private _openOnSingleClick: boolean; private _useAltAsMultipleSelectionModifier: boolean; constructor( @@ -1162,6 +1153,7 @@ export class WorkbenchAsyncDataTree extends Async const automaticKeyboardNavigation = contextKeyService.getContextKeyValue(WorkbenchListAutomaticKeyboardNavigationKey); const keyboardNavigation = configurationService.getValue(keyboardNavigationSettingKey); const horizontalScrolling = typeof options.horizontalScrolling !== 'undefined' ? options.horizontalScrolling : configurationService.getValue(horizontalScrollingKey); + const openOnSingleClick = useSingleClickToOpen(configurationService); super(container, delegate, renderers, dataSource, { keyboardSupport: false, @@ -1172,7 +1164,8 @@ export class WorkbenchAsyncDataTree extends Async automaticKeyboardNavigation, simpleKeyboardNavigation: keyboardNavigation === 'simple', filterOnType: keyboardNavigation === 'filter', - horizontalScrolling + horizontalScrolling, + openOnSingleClick }); this.contextKeyService = createScopedContextKeyService(contextKeyService, this); @@ -1184,7 +1177,6 @@ export class WorkbenchAsyncDataTree extends Async this.hasDoubleSelection = WorkbenchListDoubleSelection.bindTo(this.contextKeyService); this.hasMultiSelection = WorkbenchListMultiSelection.bindTo(this.contextKeyService); - this._openOnSingleClick = useSingleClickToOpen(configurationService); this._useAltAsMultipleSelectionModifier = useAltAsMultipleSelectionModifier(configurationService); const interestingContextKeys = new Set(); @@ -1210,7 +1202,7 @@ export class WorkbenchAsyncDataTree extends Async }), configurationService.onDidChangeConfiguration(e => { if (e.affectsConfiguration(openModeSettingKey)) { - this._openOnSingleClick = useSingleClickToOpen(configurationService); + this.updateOptions({ openOnSingleClick: useSingleClickToOpen(configurationService) }); } if (e.affectsConfiguration(multiSelectModifierSettingKey)) { this._useAltAsMultipleSelectionModifier = useAltAsMultipleSelectionModifier(configurationService); @@ -1238,10 +1230,6 @@ export class WorkbenchAsyncDataTree extends Async ); } - get openOnSingleClick(): boolean { - return this._openOnSingleClick; - } - get useAltAsMultipleSelectionModifier(): boolean { return this._useAltAsMultipleSelectionModifier; }