mirror of
https://github.com/microsoft/vscode.git
synced 2026-05-27 02:37:26 +01:00
joh/breadcrumb reveal (#170863)
* don't reveal negative indexes * don't update breadcrumbs on each and every file system registration fixes https://github.com/microsoft/vscode/issues/169875
This commit is contained in:
@@ -235,15 +235,19 @@ export class BreadcrumbsWidget {
|
||||
}
|
||||
|
||||
private _reveal(nth: number, minimal: boolean): void {
|
||||
if (nth < 0 || nth >= this._nodes.length) {
|
||||
return;
|
||||
}
|
||||
const node = this._nodes[nth];
|
||||
if (node) {
|
||||
const { width } = this._scrollable.getScrollDimensions();
|
||||
const { scrollLeft } = this._scrollable.getScrollPosition();
|
||||
if (!minimal || node.offsetLeft > scrollLeft + width || node.offsetLeft < scrollLeft) {
|
||||
this._scrollable.setRevealOnScroll(false);
|
||||
this._scrollable.setScrollPosition({ scrollLeft: node.offsetLeft });
|
||||
this._scrollable.setRevealOnScroll(true);
|
||||
}
|
||||
if (!node) {
|
||||
return;
|
||||
}
|
||||
const { width } = this._scrollable.getScrollDimensions();
|
||||
const { scrollLeft } = this._scrollable.getScrollPosition();
|
||||
if (!minimal || node.offsetLeft > scrollLeft + width || node.offsetLeft < scrollLeft) {
|
||||
this._scrollable.setRevealOnScroll(false);
|
||||
this._scrollable.setScrollPosition({ scrollLeft: node.offsetLeft });
|
||||
this._scrollable.setRevealOnScroll(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ import { BreadcrumbsItem, BreadcrumbsWidget, IBreadcrumbsItemEvent, IBreadcrumbs
|
||||
import { tail } from 'vs/base/common/arrays';
|
||||
import { timeout } from 'vs/base/common/async';
|
||||
import { KeyCode, KeyMod } from 'vs/base/common/keyCodes';
|
||||
import { combinedDisposable, DisposableStore, toDisposable } from 'vs/base/common/lifecycle';
|
||||
import { combinedDisposable, DisposableStore, MutableDisposable, toDisposable } from 'vs/base/common/lifecycle';
|
||||
import { extUri } from 'vs/base/common/resources';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import 'vs/css!./media/breadcrumbscontrol';
|
||||
@@ -181,6 +181,7 @@ export class BreadcrumbsControl {
|
||||
private readonly _disposables = new DisposableStore();
|
||||
private readonly _breadcrumbsDisposables = new DisposableStore();
|
||||
private readonly _labels: ResourceLabels;
|
||||
private readonly _model = new MutableDisposable<BreadcrumbsModel>();
|
||||
private _breadcrumbsPickerShowing = false;
|
||||
private _breadcrumbsPickerIgnoreOnceItem: BreadcrumbsItem | undefined;
|
||||
|
||||
@@ -236,6 +237,10 @@ export class BreadcrumbsControl {
|
||||
this.domNode.remove();
|
||||
}
|
||||
|
||||
get model(): BreadcrumbsModel | undefined {
|
||||
return this._model.value;
|
||||
}
|
||||
|
||||
layout(dim: dom.Dimension | undefined): void {
|
||||
this._widget.layout(dim);
|
||||
}
|
||||
@@ -284,6 +289,7 @@ export class BreadcrumbsControl {
|
||||
fileInfoUri ?? uri,
|
||||
this._editorGroup.activeEditorPane
|
||||
);
|
||||
this._model.value = model;
|
||||
|
||||
this.domNode.classList.toggle('backslash-path', this._labelService.getSeparator(uri.scheme, uri.authority) === '\\');
|
||||
|
||||
@@ -317,7 +323,7 @@ export class BreadcrumbsControl {
|
||||
updateBreadcrumbs();
|
||||
this._breadcrumbsDisposables.clear();
|
||||
this._breadcrumbsDisposables.add(listener);
|
||||
this._breadcrumbsDisposables.add(model);
|
||||
this._breadcrumbsDisposables.add(toDisposable(() => this._model.clear()));
|
||||
this._breadcrumbsDisposables.add(configListener);
|
||||
this._breadcrumbsDisposables.add(toDisposable(() => this._widget.setItems([])));
|
||||
|
||||
|
||||
@@ -165,7 +165,11 @@ export abstract class TitleControl extends Themable {
|
||||
this.breadcrumbsControl = this.instantiationService.createInstance(BreadcrumbsControl, container, options, this.group);
|
||||
}
|
||||
|
||||
this._register(this.fileService.onDidChangeFileSystemProviderRegistrations(() => {
|
||||
this._register(this.fileService.onDidChangeFileSystemProviderRegistrations(e => {
|
||||
if (this.breadcrumbsControl?.model && this.breadcrumbsControl.model.resource.scheme !== e.scheme) {
|
||||
// ignore if the scheme of the breadcrumbs resource is not affected
|
||||
return;
|
||||
}
|
||||
if (this.breadcrumbsControl?.update()) {
|
||||
this.handleBreadcrumbsEnablementChange();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user