diff --git a/src/vs/base/browser/ui/breadcrumbs/breadcrumbsWidget.ts b/src/vs/base/browser/ui/breadcrumbs/breadcrumbsWidget.ts index cdd4dee081911b520f63580f4832c35dc3d3f343..e18a0c04283dfa60670d23247369c824e8a102ed 100644 --- a/src/vs/base/browser/ui/breadcrumbs/breadcrumbsWidget.ts +++ b/src/vs/base/browser/ui/breadcrumbs/breadcrumbsWidget.ts @@ -192,6 +192,7 @@ export class BreadcrumbsWidget { } private _focus(nth: number, payload: any): void { + const oldIdx = this._focusedItemIdx; this._focusedItemIdx = -1; for (let i = 0; i < this._nodes.length; i++) { const node = this._nodes[i]; @@ -203,8 +204,10 @@ export class BreadcrumbsWidget { node.focus(); } } - this._reveal(this._focusedItemIdx); - this._onDidFocusItem.fire({ type: 'focus', item: this._items[this._focusedItemIdx], node: this._nodes[this._focusedItemIdx], payload }); + if (this._focusedItemIdx !== oldIdx) { + this._reveal(this._focusedItemIdx); + this._onDidFocusItem.fire({ type: 'focus', item: this._items[this._focusedItemIdx], node: this._nodes[this._focusedItemIdx], payload }); + } } reveal(item: BreadcrumbsItem): void { @@ -232,6 +235,7 @@ export class BreadcrumbsWidget { } private _select(nth: number, payload: any): void { + const oldIdx = this._selectedItemIdx; this._selectedItemIdx = -1; for (let i = 0; i < this._nodes.length; i++) { const node = this._nodes[i]; @@ -242,7 +246,9 @@ export class BreadcrumbsWidget { dom.addClass(node, 'selected'); } } - this._onDidSelectItem.fire({ type: 'select', item: this._items[this._selectedItemIdx], node: this._nodes[this._selectedItemIdx], payload }); + if (this._selectedItemIdx !== oldIdx) { + this._onDidSelectItem.fire({ type: 'select', item: this._items[this._selectedItemIdx], node: this._nodes[this._selectedItemIdx], payload }); + } } getItems(): ReadonlyArray { diff --git a/src/vs/workbench/browser/parts/editor/breadcrumbsControl.ts b/src/vs/workbench/browser/parts/editor/breadcrumbsControl.ts index 8f444b46e1c58b09a0cc988f7d48499ddfdf0cb4..c0af94c3593b5561b78e64d19b4c05d40e43aeb6 100644 --- a/src/vs/workbench/browser/parts/editor/breadcrumbsControl.ts +++ b/src/vs/workbench/browser/parts/editor/breadcrumbsControl.ts @@ -233,7 +233,7 @@ export class BreadcrumbsControl { this._breadcrumbsDisposables.push({ dispose: () => { if (this._breadcrumbsPickerShowing) { - this._contextViewService.hideContextView(); + this._contextViewService.hideContextView(this); } } }); @@ -277,9 +277,7 @@ export class BreadcrumbsControl { render: (parent: HTMLElement) => { picker = createBreadcrumbsPicker(this._instantiationService, parent, element); let listener = picker.onDidPickElement(data => { - this._contextViewService.hideContextView(); - this._widget.setFocused(undefined); - this._widget.setSelection(undefined); + this._contextViewService.hideContextView(this); this._revealInEditor(event, data); }); this._breadcrumbsPickerShowing = true; @@ -309,9 +307,13 @@ export class BreadcrumbsControl { picker.setInput(element); return { x, y }; }, - onHide: () => { + onHide: (data) => { this._breadcrumbsPickerShowing = false; this._updateCkBreadcrumbsActive(); + if (data === this) { + this._widget.setFocused(undefined); + this._widget.setSelection(undefined); + } } }); }