diff --git a/src/vs/base/browser/ui/grid/gridview.ts b/src/vs/base/browser/ui/grid/gridview.ts index 497678cee416dccebf88e7030034acef9bbee46f..1760b6f42a0d3c8d69d1bd4aa0f2045d9bdd68d6 100644 --- a/src/vs/base/browser/ui/grid/gridview.ts +++ b/src/vs/base/browser/ui/grid/gridview.ts @@ -549,11 +549,11 @@ class LeafNode implements ISplitView, IDisposable { } } - setVisible(visible: boolean): void { + setVisible(visible: boolean, cachedVisibleSize?: number): void { if (visible) { this._cachedVisibleSize = undefined; } else { - this._cachedVisibleSize = this._size; + this._cachedVisibleSize = typeof cachedVisibleSize === 'number' ? cachedVisibleSize : this._size; } if (this.view.setVisible) { diff --git a/src/vs/base/browser/ui/splitview/splitview.ts b/src/vs/base/browser/ui/splitview/splitview.ts index 4baf9ff402395220ef5643bc9d6cb0c95610b0bb..179b888f95e187da22f9f7993115db144b704695 100644 --- a/src/vs/base/browser/ui/splitview/splitview.ts +++ b/src/vs/base/browser/ui/splitview/splitview.ts @@ -49,7 +49,7 @@ export interface IView { readonly priority?: LayoutPriority; readonly snap?: boolean; layout(size: number, orientation: Orientation): void; - setVisible?(visible: boolean): void; + setVisible?(visible: boolean, cachedVisibleSize?: number): void; } interface ISashEvent { @@ -79,7 +79,7 @@ abstract class ViewItem { return typeof this._cachedVisibleSize === 'undefined'; } - set visible(visible: boolean) { + setVisible(visible: boolean, size?: number): void { if (visible === this.visible) { return; } @@ -88,14 +88,14 @@ abstract class ViewItem { this.size = clamp(this._cachedVisibleSize!, this.viewMinimumSize, this.viewMaximumSize); this._cachedVisibleSize = undefined; } else { - this._cachedVisibleSize = this.size; + this._cachedVisibleSize = typeof size === 'number' ? size : this.size; this.size = 0; } dom.toggleClass(this.container, 'visible', visible); if (this.view.setVisible) { - this.view.setVisible(visible); + this.view.setVisible(visible, this._cachedVisibleSize); } } @@ -161,6 +161,7 @@ interface ISashItem { interface ISashDragSnapState { readonly index: number; readonly limitDelta: number; + readonly size: number; } interface ISashDragState { @@ -453,7 +454,7 @@ export class SplitView extends Disposable { } const viewItem = this.viewItems[index]; - viewItem.visible = visible; + viewItem.setVisible(visible); this.distributeEmptySpace(index); this.layoutViews(); @@ -552,7 +553,8 @@ export class SplitView extends Disposable { snapBefore = { index: snapBeforeIndex, - limitDelta: viewItem.visible ? minDelta - halfSize : minDelta + halfSize + limitDelta: viewItem.visible ? minDelta - halfSize : minDelta + halfSize, + size: viewItem.size }; } @@ -562,7 +564,8 @@ export class SplitView extends Disposable { snapAfter = { index: snapAfterIndex, - limitDelta: viewItem.visible ? maxDelta + halfSize : maxDelta - halfSize + limitDelta: viewItem.visible ? maxDelta + halfSize : maxDelta - halfSize, + size: viewItem.size }; } } @@ -740,14 +743,14 @@ export class SplitView extends Disposable { const snapView = this.viewItems[snapBefore.index]; const visible = delta >= snapBefore.limitDelta; snapped = visible !== snapView.visible; - snapView.visible = visible; + snapView.setVisible(visible, snapBefore.size); } if (!snapped && snapAfter) { const snapView = this.viewItems[snapAfter.index]; const visible = delta < snapAfter.limitDelta; snapped = visible !== snapView.visible; - snapView.visible = visible; + snapView.setVisible(visible, snapAfter.size); } if (snapped) {