From 44e4a98091eaee93f1b03bbd13cd1066e926e4a0 Mon Sep 17 00:00:00 2001 From: Rob Lourens Date: Thu, 7 Feb 2019 16:02:14 -0800 Subject: [PATCH] Fix #68018 - the list.select command should open the element with preserveFocus=false --- src/vs/platform/list/browser/listService.ts | 16 +++++++++++++++- src/vs/workbench/browser/actions/listCommands.ts | 4 ++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/vs/platform/list/browser/listService.ts b/src/vs/platform/list/browser/listService.ts index 389b713aebf..65095160059 100644 --- a/src/vs/platform/list/browser/listService.ts +++ b/src/vs/platform/list/browser/listService.ts @@ -655,6 +655,17 @@ export interface IResourceResultsNavigationOptions { openOnFocus: boolean; } +export interface SelectionKeyboardEvent extends KeyboardEvent { + preserveFocus?: boolean; +} + +export function getSelectionKeyboardEvent(typeArg: string, preserveFocus?: boolean): SelectionKeyboardEvent { + const e = new KeyboardEvent(typeArg); + (e).preserveFocus = preserveFocus; + + return e; +} + export class TreeResourceNavigator2 extends Disposable { private readonly _onDidOpenResource = new Emitter>(); @@ -697,10 +708,13 @@ export class TreeResourceNavigator2 extends Disposable { } const isDoubleClick = e.browserEvent.detail === 2; + const preserveFocus = (e.browserEvent instanceof KeyboardEvent && typeof (e.browserEvent).preserveFocus === 'boolean') ? + !!(e.browserEvent).preserveFocus : + !isDoubleClick; if (this.tree.openOnSingleClick || isDoubleClick) { const sideBySide = e.browserEvent instanceof MouseEvent && (e.browserEvent.ctrlKey || e.browserEvent.metaKey || e.browserEvent.altKey); - this.open(!isDoubleClick, isDoubleClick, sideBySide); + this.open(preserveFocus, isDoubleClick, sideBySide); } } diff --git a/src/vs/workbench/browser/actions/listCommands.ts b/src/vs/workbench/browser/actions/listCommands.ts index 2ce44cacbb7..94a19170266 100644 --- a/src/vs/workbench/browser/actions/listCommands.ts +++ b/src/vs/workbench/browser/actions/listCommands.ts @@ -7,7 +7,7 @@ import { KeyMod, KeyCode } from 'vs/base/common/keyCodes'; import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; import { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; import { List } from 'vs/base/browser/ui/list/listWidget'; -import { WorkbenchListFocusContextKey, IListService, WorkbenchListSupportsMultiSelectContextKey, ListWidget, WorkbenchListHasSelectionOrFocus } from 'vs/platform/list/browser/listService'; +import { WorkbenchListFocusContextKey, IListService, WorkbenchListSupportsMultiSelectContextKey, ListWidget, WorkbenchListHasSelectionOrFocus, getSelectionKeyboardEvent } from 'vs/platform/list/browser/listService'; import { PagedList } from 'vs/base/browser/ui/list/listPaging'; import { range } from 'vs/base/common/arrays'; import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; @@ -579,7 +579,7 @@ KeybindingsRegistry.registerCommandAndKeybindingRule({ // ObjectTree else if (focused instanceof ObjectTree || focused instanceof DataTree || focused instanceof AsyncDataTree) { const list = focused; - const fakeKeyboardEvent = new KeyboardEvent('keydown'); + const fakeKeyboardEvent = getSelectionKeyboardEvent('keydown', false); list.setSelection(list.getFocus(), fakeKeyboardEvent); list.open(list.getFocus()); } -- GitLab