diff --git a/src/vs/base/browser/ui/tree/abstractTree.ts b/src/vs/base/browser/ui/tree/abstractTree.ts index bd623fdd3ea..08b8d944268 100644 --- a/src/vs/base/browser/ui/tree/abstractTree.ts +++ b/src/vs/base/browser/ui/tree/abstractTree.ts @@ -199,15 +199,19 @@ export abstract class AbstractTree implements IDisposable this.onDidChangeCollapseState = this.model.onDidChangeCollapseState; this.onDidChangeRenderNodeCount = this.model.onDidChangeRenderNodeCount; - this.view.onMouseClick(this.onMouseClick, this, this.disposables); + if (options.mouseSupport !== false) { + this.view.onMouseClick(this.onMouseClick, this, this.disposables); + } - const onKeyDown = chain(this.view.onKeyDown) - .filter(e => !isInputElement(e.target as HTMLElement)) - .map(e => new StandardKeyboardEvent(e)); + if (options.keyboardSupport !== false) { + const onKeyDown = chain(this.view.onKeyDown) + .filter(e => !isInputElement(e.target as HTMLElement)) + .map(e => new StandardKeyboardEvent(e)); - onKeyDown.filter(e => e.keyCode === KeyCode.LeftArrow).on(this.onLeftArrow, this, this.disposables); - onKeyDown.filter(e => e.keyCode === KeyCode.RightArrow).on(this.onRightArrow, this, this.disposables); - onKeyDown.filter(e => e.keyCode === KeyCode.Space).on(this.onSpace, this, this.disposables); + onKeyDown.filter(e => e.keyCode === KeyCode.LeftArrow).on(this.onLeftArrow, this, this.disposables); + onKeyDown.filter(e => e.keyCode === KeyCode.RightArrow).on(this.onRightArrow, this, this.disposables); + onKeyDown.filter(e => e.keyCode === KeyCode.Space).on(this.onSpace, this, this.disposables); + } } // Widget diff --git a/src/vs/platform/list/browser/listService.ts b/src/vs/platform/list/browser/listService.ts index 003dba14a2e..1f934f83169 100644 --- a/src/vs/platform/list/browser/listService.ts +++ b/src/vs/platform/list/browser/listService.ts @@ -596,50 +596,35 @@ export class ObjectTreeResourceNavigator extends Disposable { private onFocus(e: ITreeEvent): void { const focus = this.tree.getFocus(); - this.tree.setSelection(focus, e.browserEvent); - const isMouseEvent = e.browserEvent instanceof MouseEvent; - const isDoubleClick = isMouseEvent && e.browserEvent && e.browserEvent.detail === 2; + const isMouseEvent = e.browserEvent && e.browserEvent instanceof MouseEvent; - if (!isMouseEvent || this.tree.openOnSingleClick || isDoubleClick) { - this._openResource.fire({ - editorOptions: { - preserveFocus: true, - pinned: false, - revealIfVisible: true - }, - sideBySide: false, - element: focus[0] - }); + if (!isMouseEvent) { + this.open(true, false, false); } } private onSelection(e: ITreeEvent): void { - const isMouseEvent = e.browserEvent && e.browserEvent instanceof MouseEvent; - if (!isMouseEvent || this.tree.openOnSingleClick) { + if (!e.browserEvent) { return; } - const isDoubleClick = isMouseEvent && e.browserEvent && e.browserEvent.detail === 2; + const isDoubleClick = e.browserEvent instanceof MouseEvent && e.browserEvent.detail === 2; + const sideBySide = e.browserEvent instanceof KeyboardEvent && (e.browserEvent.ctrlKey || e.browserEvent.metaKey || e.browserEvent.altKey); + this.open(!isDoubleClick, isDoubleClick, sideBySide); + } - if (!isMouseEvent || this.tree.openOnSingleClick || isDoubleClick) { - if (isDoubleClick && e.browserEvent) { - e.browserEvent.preventDefault(); // focus moves to editor, we need to prevent default - } - - const sideBySide = e.browserEvent && e.browserEvent instanceof KeyboardEvent && (e.browserEvent.ctrlKey || e.browserEvent.metaKey || e.browserEvent.altKey); - - this._openResource.fire({ - editorOptions: { - preserveFocus: isDoubleClick, - pinned: isDoubleClick, - revealIfVisible: true - }, - sideBySide, - element: this.tree.getSelection()[0] - }); - } + private open(preserveFocus: boolean, pinned: boolean, sideBySide: boolean): void { + this._openResource.fire({ + editorOptions: { + preserveFocus, + pinned, + revealIfVisible: true + }, + sideBySide, + element: this.tree.getSelection()[0] + }); } }