From 6ff5ec216c3bfbe950eefa5a40af8a7b4f90a6c5 Mon Sep 17 00:00:00 2001 From: Joao Moreno Date: Mon, 25 Mar 2019 17:54:37 +0100 Subject: [PATCH] fixes #68117 --- src/vs/base/browser/ui/tree/abstractTree.ts | 8 ++++---- src/vs/base/common/arrays.ts | 12 ++++++++++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/vs/base/browser/ui/tree/abstractTree.ts b/src/vs/base/browser/ui/tree/abstractTree.ts index d7990894be1..58fd391fd0f 100644 --- a/src/vs/base/browser/ui/tree/abstractTree.ts +++ b/src/vs/base/browser/ui/tree/abstractTree.ts @@ -14,7 +14,7 @@ import { KeyCode } from 'vs/base/common/keyCodes'; import { ITreeModel, ITreeNode, ITreeRenderer, ITreeEvent, ITreeMouseEvent, ITreeContextMenuEvent, ITreeFilter, ITreeNavigator, ICollapseStateChangeEvent, ITreeDragAndDrop, TreeDragOverBubble, TreeVisibility, TreeFilterResult, ITreeModelSpliceEvent } from 'vs/base/browser/ui/tree/tree'; import { ISpliceable } from 'vs/base/common/sequence'; import { IDragAndDropData, StaticDND, DragAndDropData } from 'vs/base/browser/dnd'; -import { range, equals } from 'vs/base/common/arrays'; +import { range, equals, distinctES6 } from 'vs/base/common/arrays'; import { ElementsDragAndDropData } from 'vs/base/browser/ui/list/listView'; import { domEvent } from 'vs/base/browser/event'; import { fuzzyScore, FuzzyScore } from 'vs/base/common/filters'; @@ -924,7 +924,7 @@ class TreeNodeList extends List> const additionalSelection: number[] = []; elements.forEach((node, index) => { - if (this.selectionTrait.has(node)) { + if (this.focusTrait.has(node)) { additionalFocus.push(start + index); } @@ -934,11 +934,11 @@ class TreeNodeList extends List> }); if (additionalFocus.length > 0) { - super.setFocus([...super.getFocus(), ...additionalFocus]); + super.setFocus(distinctES6([...super.getFocus(), ...additionalFocus])); } if (additionalSelection.length > 0) { - super.setSelection([...super.getSelection(), ...additionalSelection]); + super.setSelection(distinctES6([...super.getSelection(), ...additionalSelection])); } } diff --git a/src/vs/base/common/arrays.ts b/src/vs/base/common/arrays.ts index c699b80e251..8a3bb5bdbc0 100644 --- a/src/vs/base/common/arrays.ts +++ b/src/vs/base/common/arrays.ts @@ -364,6 +364,18 @@ export function distinct(array: ReadonlyArray, keyFn?: (t: T) => string): }); } +export function distinctES6(array: ReadonlyArray): T[] { + const seen = new Set(); + return array.filter(element => { + if (seen.has(element)) { + return false; + } + + seen.add(element); + return true; + }); +} + export function uniqueFilter(keyFn: (t: T) => string): (t: T) => boolean { const seen: { [key: string]: boolean; } = Object.create(null); -- GitLab