Skip to content

Commit

Permalink
Fix #68018 - the list.select command should open the element with pre…
Browse files Browse the repository at this point in the history
…serveFocus=false
  • Loading branch information
roblourens committed Feb 8, 2019
1 parent 1cb2f55 commit 44e4a98
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 3 deletions.
16 changes: 15 additions & 1 deletion src/vs/platform/list/browser/listService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
(<SelectionKeyboardEvent>e).preserveFocus = preserveFocus;

return e;
}

export class TreeResourceNavigator2<T, TFilterData> extends Disposable {

private readonly _onDidOpenResource = new Emitter<IOpenEvent<T | null>>();
Expand Down Expand Up @@ -697,10 +708,13 @@ export class TreeResourceNavigator2<T, TFilterData> extends Disposable {
}

const isDoubleClick = e.browserEvent.detail === 2;
const preserveFocus = (e.browserEvent instanceof KeyboardEvent && typeof (<SelectionKeyboardEvent>e.browserEvent).preserveFocus === 'boolean') ?
!!(<SelectionKeyboardEvent>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);
}
}

Expand Down
4 changes: 2 additions & 2 deletions src/vs/workbench/browser/actions/listCommands.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -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());
}
Expand Down

0 comments on commit 44e4a98

Please sign in to comment.