Skip to content

Commit 36f1463

Browse files
authored
editors - add capability to control centered layout (fix microsoft#154738) (microsoft#155565)
1 parent a74aded commit 36f1463

File tree

5 files changed

+24
-14
lines changed

5 files changed

+24
-14
lines changed

src/vs/workbench/browser/layout.ts

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ import { EventType, addDisposableListener, getClientArea, Dimension, position, s
99
import { onDidChangeFullscreen, isFullscreen } from 'vs/base/browser/browser';
1010
import { IWorkingCopyBackupService } from 'vs/workbench/services/workingCopy/common/workingCopyBackup';
1111
import { isWindows, isLinux, isMacintosh, isWeb, isNative, isIOS } from 'vs/base/common/platform';
12-
import { isResourceEditorInput, IUntypedEditorInput, pathsToEditors } from 'vs/workbench/common/editor';
13-
import { SideBySideEditorInput } from 'vs/workbench/common/editor/sideBySideEditorInput';
12+
import { EditorInputCapabilities, isResourceEditorInput, IUntypedEditorInput, pathsToEditors } from 'vs/workbench/common/editor';
1413
import { SidebarPart } from 'vs/workbench/browser/parts/sidebar/sidebarPart';
1514
import { PanelPart } from 'vs/workbench/browser/parts/panel/panelPart';
1615
import { Position, Parts, PanelOpensMaximizedOptions, IWorkbenchLayoutService, positionFromString, positionToString, panelOpensMaximizedFromString, PanelAlignment } from 'vs/workbench/services/layout/browser/layoutService';
@@ -1309,27 +1308,25 @@ export abstract class Layout extends Disposable implements IWorkbenchLayoutServi
13091308
centerEditorLayout(active: boolean, skipLayout?: boolean): void {
13101309
this.stateModel.setRuntimeValue(LayoutStateKeys.EDITOR_CENTERED, active);
13111310

1312-
let smartActive = active;
13131311
const activeEditor = this.editorService.activeEditor;
13141312

1315-
let isEditorSplit = false;
1313+
let isEditorComplex = false;
13161314
if (activeEditor instanceof DiffEditorInput) {
1317-
isEditorSplit = this.configurationService.getValue('diffEditor.renderSideBySide');
1318-
} else if (activeEditor instanceof SideBySideEditorInput) {
1319-
isEditorSplit = true;
1315+
isEditorComplex = this.configurationService.getValue('diffEditor.renderSideBySide');
1316+
} else if (activeEditor?.hasCapability(EditorInputCapabilities.MultipleEditors)) {
1317+
isEditorComplex = true;
13201318
}
13211319

13221320
const isCenteredLayoutAutoResizing = this.configurationService.getValue('workbench.editor.centeredLayoutAutoResize');
13231321
if (
13241322
isCenteredLayoutAutoResizing &&
1325-
(this.editorGroupService.groups.length > 1 || isEditorSplit)
1323+
(this.editorGroupService.groups.length > 1 || isEditorComplex)
13261324
) {
1327-
smartActive = false;
1325+
active = false; // disable centered layout for complex editors or when there is more than one group
13281326
}
13291327

1330-
// Enter Centered Editor Layout
1331-
if (this.editorGroupService.isLayoutCentered() !== smartActive) {
1332-
this.editorGroupService.centerLayout(smartActive);
1328+
if (this.editorGroupService.isLayoutCentered() !== active) {
1329+
this.editorGroupService.centerLayout(active);
13331330

13341331
if (!skipLayout) {
13351332
this.layout();

src/vs/workbench/common/editor.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -733,6 +733,12 @@ export const enum EditorInputCapabilities {
733733
* editor by holding shift.
734734
*/
735735
CanDropIntoEditor = 1 << 7,
736+
737+
/**
738+
* Signals that the editor is composed of multiple editors
739+
* within.
740+
*/
741+
MultipleEditors = 1 << 8
736742
}
737743

738744
export type IUntypedEditorInput = IResourceEditorInput | ITextResourceEditorInput | IUntitledTextResourceEditorInput | IResourceDiffEditorInput | IResourceSideBySideEditorInput | IResourceMergeEditorInput;

src/vs/workbench/common/editor/sideBySideEditorInput.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ export class SideBySideEditorInput extends EditorInput implements ISideBySideEdi
4242
capabilities |= EditorInputCapabilities.Singleton;
4343
}
4444

45+
// Indicate we show more than one editor
46+
capabilities |= EditorInputCapabilities.MultipleEditors;
47+
4548
return capabilities;
4649
}
4750

src/vs/workbench/contrib/mergeEditor/browser/mergeEditorInput.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { ConfirmResult, IDialogService } from 'vs/platform/dialogs/common/dialog
1313
import { IFileService } from 'vs/platform/files/common/files';
1414
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
1515
import { ILabelService } from 'vs/platform/label/common/label';
16-
import { IEditorIdentifier, IResourceMergeEditorInput, isResourceMergeEditorInput, IUntypedEditorInput } from 'vs/workbench/common/editor';
16+
import { EditorInputCapabilities, IEditorIdentifier, IResourceMergeEditorInput, isResourceMergeEditorInput, IUntypedEditorInput } from 'vs/workbench/common/editor';
1717
import { EditorInput, IEditorCloseHandler } from 'vs/workbench/common/editor/editorInput';
1818
import { AbstractTextResourceEditorInput } from 'vs/workbench/common/editor/textResourceEditorInput';
1919
import { EditorWorkerServiceDiffComputer } from 'vs/workbench/contrib/mergeEditor/browser/model/diffComputer';
@@ -84,6 +84,10 @@ export class MergeEditorInput extends AbstractTextResourceEditorInput implements
8484
return MergeEditorInput.ID;
8585
}
8686

87+
override get capabilities(): EditorInputCapabilities {
88+
return super.capabilities | EditorInputCapabilities.MultipleEditors;
89+
}
90+
8791
override getName(): string {
8892
return localize('name', "Merging: {0}", super.getName());
8993
}

src/vs/workbench/test/browser/parts/editor/editor.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ suite('Workbench editor utils', () => {
120120
testInput2.capabilities = EditorInputCapabilities.None;
121121

122122
const sideBySideInput = instantiationService.createInstance(SideBySideEditorInput, 'name', undefined, testInput1, testInput2);
123-
assert.strictEqual(sideBySideInput.hasCapability(EditorInputCapabilities.None), true);
123+
assert.strictEqual(sideBySideInput.hasCapability(EditorInputCapabilities.MultipleEditors), true);
124124
assert.strictEqual(sideBySideInput.hasCapability(EditorInputCapabilities.Readonly), false);
125125
assert.strictEqual(sideBySideInput.hasCapability(EditorInputCapabilities.Untitled), false);
126126
assert.strictEqual(sideBySideInput.hasCapability(EditorInputCapabilities.RequiresTrust), false);

0 commit comments

Comments
 (0)