diff --git a/.github/skills/sessions/SKILL.md b/.github/skills/sessions/SKILL.md index 4889632066b..fc49548b7a3 100644 --- a/.github/skills/sessions/SKILL.md +++ b/.github/skills/sessions/SKILL.md @@ -139,7 +139,7 @@ Use the `agent-sessions-layout` skill for detailed guidance on the layout. Key p ### 4.3 Editor Modal -The main editor part is hidden (`display:none`). All editors open via `MODAL_GROUP` into the standard `ModalEditorPart` overlay (created on-demand by `EditorParts.createModalEditorPart`). The sessions configuration sets `workbench.editor.useModal` to `'on'`, which causes `findGroup()` to redirect all editor opens to the modal. Click backdrop or press Escape to dismiss. +The main editor part is hidden (`display:none`). All editors open via `MODAL_GROUP` into the standard `ModalEditorPart` overlay (created on-demand by `EditorParts.createModalEditorPart`). The sessions configuration sets `workbench.editor.useModal` to `'all'`, which causes `findGroup()` to redirect all editor opens to the modal. Click backdrop or press Escape to dismiss. ## 5. Chat Widget diff --git a/src/vs/sessions/LAYOUT.md b/src/vs/sessions/LAYOUT.md index 7cd6cc059ba..fea9a1c370b 100644 --- a/src/vs/sessions/LAYOUT.md +++ b/src/vs/sessions/LAYOUT.md @@ -178,9 +178,9 @@ The main editor part is created but hidden (`display:none`). It exists for futur #### How It Works -The sessions configuration sets `workbench.editor.useModal` to `'on'` (in `contrib/configuration/browser/configuration.contribution.ts`). This causes `findGroup()` in `editorGroupFinder.ts` to redirect all editor opens (that do not specify an explicit preferred group) to `createModalEditorPart()`, which creates the standard workbench `ModalEditorPart` overlay on-demand. +The sessions configuration sets `workbench.editor.useModal` to `'all'` (in `contrib/configuration/browser/configuration.contribution.ts`). This causes `findGroup()` in `editorGroupFinder.ts` to redirect all editor opens (that do not specify an explicit preferred group) to `createModalEditorPart()`, which creates the standard workbench `ModalEditorPart` overlay on-demand. -When the setting is `'on'`: +When the setting is `'all'`: - All editors without an explicit preferred group open in the modal editor part - The modal is not auto-closed when editors open without explicit `MODAL_GROUP` as preferred group @@ -197,8 +197,8 @@ When the setting is `'on'`: The setting `workbench.editor.useModal` is an enum with three values: - `'off'`: Editors never open in a modal overlay -- `'default'`: Certain editors (e.g. Settings, Keyboard Shortcuts) may open in a modal overlay when requested via `MODAL_GROUP` -- `'on'`: All editors open in a modal overlay (used by sessions window) +- `'some'`: Certain editors (e.g. Settings, Keyboard Shortcuts) may open in a modal overlay when requested via `MODAL_GROUP` +- `'all'`: All editors open in a modal overlay (used by sessions window) --- @@ -640,7 +640,7 @@ interface IPartVisibilityState { | Date | Change | |------|--------| -| 2026-02-20 | Replaced custom `EditorModal` with standard `ModalEditorPart` via `MODAL_GROUP`; main editor part created but hidden; changed `workbench.editor.useModal` from boolean to enum (`off`/`default`/`on`); sessions config uses `on`; removed `editorModal.ts` and editor modal CSS | +| 2026-02-20 | Replaced custom `EditorModal` with standard `ModalEditorPart` via `MODAL_GROUP`; main editor part created but hidden; changed `workbench.editor.useModal` from boolean to enum (`off`/`some`/`all`); sessions config uses `all`; removed `editorModal.ts` and editor modal CSS | | 2026-02-17 | Added `-webkit-app-region: drag` to sidebar title area so it can be used to drag the window; interactive children (actions, composite bar, labels) marked `no-drag`; CSS rules scoped to `.agent-sessions-workbench` in `parts/media/sidebarPart.css` | | 2026-02-13 | Documentation sync: Updated all file names, class names, and references to match current implementation. `AgenticWorkbench` → `Workbench`, `AgenticSidebarPart` → `SidebarPart`, `AgenticAuxiliaryBarPart` → `AuxiliaryBarPart`, `AgenticPanelPart` → `PanelPart`, `agenticWorkbench.ts` → `workbench.ts`, `agenticWorkbenchMenus.ts` → `menus.ts`, `agenticLayoutActions.ts` → `layoutActions.ts`, `AgenticTitleBarWidget` → `SessionsTitleBarWidget`, `AgenticTitleBarContribution` → `SessionsTitleBarContribution`. Removed references to deleted files (`sidebarRevealButton.ts`, `floatingToolbar.ts`, `agentic.contributions.ts`, `agenticTitleBarWidget.ts`). Updated pane composite architecture from `SyncDescriptor`-based to `AgenticPaneCompositePartService`. Moved account widget docs from titlebar to sidebar footer. Added documentation for sidebar footer, project bar, traffic light spacer, card appearance styling, widget directory, and new contrib structure (`accountMenu/`, `chat/`, `configuration/`, `sessions/`). Updated titlebar actions to reflect Run Script split button and Open submenu. Removed Toggle Maximize panel action (no longer registered). Updated contributions section with all current contributions and their locations. | | 2026-02-13 | Changed grid structure: sidebar now spans full window height at root level (HORIZONTAL root orientation); Titlebar moved inside right section; Grid is now `Sidebar \| [Titlebar / TopRight / Panel]` instead of `Titlebar / [Sidebar \| RightSection]`; Panel maximize now excludes both titlebar and sidebar; Floating toolbar positioning no longer depends on titlebar height | diff --git a/src/vs/sessions/contrib/aiCustomizationTreeView/browser/aiCustomizationOverviewView.ts b/src/vs/sessions/contrib/aiCustomizationTreeView/browser/aiCustomizationOverviewView.ts index 0eedb76a519..36a04c2ebc0 100644 --- a/src/vs/sessions/contrib/aiCustomizationTreeView/browser/aiCustomizationOverviewView.ts +++ b/src/vs/sessions/contrib/aiCustomizationTreeView/browser/aiCustomizationOverviewView.ts @@ -19,7 +19,6 @@ import { IContextKeyService } from '../../../../platform/contextkey/common/conte import { IOpenerService } from '../../../../platform/opener/common/opener.js'; import { IThemeService } from '../../../../platform/theme/common/themeService.js'; import { IHoverService } from '../../../../platform/hover/browser/hover.js'; -import { IEditorGroupsService } from '../../../../workbench/services/editor/common/editorGroupsService.js'; import { IPromptsService } from '../../../../workbench/contrib/chat/common/promptSyntax/service/promptsService.js'; import { PromptsType } from '../../../../workbench/contrib/chat/common/promptSyntax/promptTypes.js'; import { AICustomizationManagementSection } from '../../../../workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.js'; @@ -28,6 +27,7 @@ import { AICustomizationManagementEditor } from '../../../../workbench/contrib/c import { agentIcon, instructionsIcon, promptIcon, skillIcon } from '../../../../workbench/contrib/chat/browser/aiCustomization/aiCustomizationIcons.js'; import { IWorkspaceContextService } from '../../../../platform/workspace/common/workspace.js'; import { IAICustomizationWorkspaceService } from '../../../../workbench/contrib/chat/common/aiCustomizationWorkspaceService.js'; +import { IEditorService } from '../../../../workbench/services/editor/common/editorService.js'; const $ = DOM.$; @@ -63,7 +63,7 @@ export class AICustomizationOverviewView extends ViewPane { @IOpenerService openerService: IOpenerService, @IThemeService themeService: IThemeService, @IHoverService hoverService: IHoverService, - @IEditorGroupsService private readonly editorGroupsService: IEditorGroupsService, + @IEditorService private readonly editorService: IEditorService, @IPromptsService private readonly promptsService: IPromptsService, @IWorkspaceContextService private readonly workspaceContextService: IWorkspaceContextService, @IAICustomizationWorkspaceService private readonly workspaceService: IAICustomizationWorkspaceService, @@ -187,7 +187,7 @@ export class AICustomizationOverviewView extends ViewPane { private async openSection(sectionId: AICustomizationManagementSection): Promise { const input = AICustomizationManagementEditorInput.getOrCreate(); - const editor = await this.editorGroupsService.activeGroup.openEditor(input, { pinned: true }); + const editor = await this.editorService.openEditor(input, { pinned: true }); // Deep-link to the section if (editor instanceof AICustomizationManagementEditor) { diff --git a/src/vs/sessions/contrib/configuration/browser/configuration.contribution.ts b/src/vs/sessions/contrib/configuration/browser/configuration.contribution.ts index 73601b49ce1..060a1b2e7d3 100644 --- a/src/vs/sessions/contrib/configuration/browser/configuration.contribution.ts +++ b/src/vs/sessions/contrib/configuration/browser/configuration.contribution.ts @@ -36,7 +36,7 @@ Registry.as(Extensions.Configuration).registerDefaultCon 'workbench.startupEditor': 'none', 'workbench.tips.enabled': false, 'workbench.layoutControl.type': 'toggles', - 'workbench.editor.useModal': 'on', + 'workbench.editor.useModal': 'all', 'workbench.editor.labelFormat': 'short', 'window.menuStyle': 'custom', 'window.dialogStyle': 'custom', diff --git a/src/vs/sessions/contrib/sessions/browser/customizationsToolbar.contribution.ts b/src/vs/sessions/contrib/sessions/browser/customizationsToolbar.contribution.ts index c4a021a04d2..f2e6d9e45e7 100644 --- a/src/vs/sessions/contrib/sessions/browser/customizationsToolbar.contribution.ts +++ b/src/vs/sessions/contrib/sessions/browser/customizationsToolbar.contribution.ts @@ -13,7 +13,6 @@ import { Action2, registerAction2 } from '../../../../platform/actions/common/ac import { IActionViewItemService } from '../../../../platform/actions/browser/actionViewItemService.js'; import { IInstantiationService, ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; import { IWorkbenchContribution, registerWorkbenchContribution2, WorkbenchPhase } from '../../../../workbench/common/contributions.js'; -import { IEditorGroupsService } from '../../../../workbench/services/editor/common/editorGroupsService.js'; import { AICustomizationManagementEditor } from '../../../../workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditor.js'; import { AICustomizationManagementSection } from '../../../../workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.js'; import { AICustomizationManagementEditorInput } from '../../../../workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditorInput.js'; @@ -32,6 +31,7 @@ import { ISessionsManagementService } from './sessionsManagementService.js'; import { Button } from '../../../../base/browser/ui/button/button.js'; import { defaultButtonStyles } from '../../../../platform/theme/browser/defaultStyles.js'; import { getPromptSourceCounts, getSkillSourceCounts, getSourceCountsTotal, ISourceCounts } from './customizationCounts.js'; +import { IEditorService } from '../../../../workbench/services/editor/common/editorService.js'; interface ICustomizationItemConfig { readonly id: string; @@ -250,9 +250,9 @@ class CustomizationsToolbarContribution extends Disposable implements IWorkbench }); } async run(accessor: ServicesAccessor): Promise { - const editorGroupsService = accessor.get(IEditorGroupsService); + const editorService = accessor.get(IEditorService); const input = AICustomizationManagementEditorInput.getOrCreate(); - const editor = await editorGroupsService.activeGroup.openEditor(input, { pinned: true }); + const editor = await editorService.openEditor(input, { pinned: true }); if (editor instanceof AICustomizationManagementEditor) { editor.selectSectionById(config.section); } diff --git a/src/vs/workbench/browser/parts/editor/diffEditorCommands.ts b/src/vs/workbench/browser/parts/editor/diffEditorCommands.ts index ca925a7e824..5c28b20e395 100644 --- a/src/vs/workbench/browser/parts/editor/diffEditorCommands.ts +++ b/src/vs/workbench/browser/parts/editor/diffEditorCommands.ts @@ -18,7 +18,6 @@ import { DiffEditorInput } from '../../../common/editor/diffEditorInput.js'; import { IEditorService } from '../../../services/editor/common/editorService.js'; import { IUntypedEditorInput } from '../../../common/editor.js'; import { EditorContextKeys } from '../../../../editor/common/editorContextKeys.js'; -import { IEditorGroupsService } from '../../../services/editor/common/editorGroupsService.js'; import { isDiffEditor } from '../../../../editor/browser/editorBrowser.js'; import { EditorInput } from '../../../common/editor/editorInput.js'; @@ -40,7 +39,6 @@ export function registerDiffEditorCommands(): void { primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.Shift | KeyCode.KeyO), handler: async accessor => { const editorService = accessor.get(IEditorService); - const editorGroupsService = accessor.get(IEditorGroupsService); const activeEditor = editorService.activeEditor; const activeTextEditorControl = editorService.activeTextEditorControl; @@ -56,7 +54,7 @@ export function registerDiffEditorCommands(): void { editor = activeEditor.modified; } - return editorGroupsService.activeGroup.openEditor(editor); + return editorService.openEditor(editor); } }); diff --git a/src/vs/workbench/browser/workbench.contribution.ts b/src/vs/workbench/browser/workbench.contribution.ts index a14964c0ef4..017648b71fd 100644 --- a/src/vs/workbench/browser/workbench.contribution.ts +++ b/src/vs/workbench/browser/workbench.contribution.ts @@ -351,14 +351,14 @@ const registry = Registry.as(ConfigurationExtensions.Con }, 'workbench.editor.useModal': { 'type': 'string', - 'enum': ['off', 'default', 'on'], + 'enum': ['off', 'some', 'all'], 'enumDescriptions': [ localize('useModal.off', "Editors never open in a modal overlay."), - localize('useModal.default', "Certain editors such as Settings and Keyboard Shortcuts may open in a centered modal overlay."), - localize('useModal.on', "All editors open in a centered modal overlay."), + localize('useModal.some', "Certain editors such as Settings and Keyboard Shortcuts may open in a centered modal overlay."), + localize('useModal.all', "All editors open in a centered modal overlay."), ], 'description': localize('useModal', "Controls whether editors open in a modal overlay."), - 'default': product.quality !== 'stable' ? 'default' : 'off', + 'default': product.quality !== 'stable' ? 'some' : 'off', tags: ['experimental'], experiment: { mode: 'auto' @@ -1035,3 +1035,16 @@ Registry.as(Extensions.ConfigurationMigration) return result; } }]); + +Registry.as(Extensions.ConfigurationMigration) + .registerConfigurationMigrations([{ + key: 'workbench.editor.useModal', migrateFn: (value: unknown) => { + const result: ConfigurationKeyValuePairs = []; + if (value === 'default') { + result.push(['workbench.editor.useModal', { value: 'some' }]); + } else if (value === 'on') { + result.push(['workbench.editor.useModal', { value: 'all' }]); + } + return result; + } + }]); diff --git a/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.ts b/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.ts index 2c2b1b782a5..8439b5518b7 100644 --- a/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.ts +++ b/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.ts @@ -442,7 +442,7 @@ export class ChatEditingSession extends Disposable implements IChatEditingSessio if (this._editorPane.isVisible()) { return; } else if (this._editorPane.input) { - await this._editorGroupsService.activeGroup.openEditor(this._editorPane.input, { pinned: true, activation: EditorActivation.ACTIVATE }); + await this._editorService.openEditor(this._editorPane.input, { pinned: true, activation: EditorActivation.ACTIVATE }); return; } } @@ -451,7 +451,7 @@ export class ChatEditingSession extends Disposable implements IChatEditingSessio label: localize('multiDiffEditorInput.name', "Suggested Edits") }, this._instantiationService); - this._editorPane = await this._editorGroupsService.activeGroup.openEditor(input, { pinned: true, activation: EditorActivation.ACTIVATE }) as MultiDiffEditor | undefined; + this._editorPane = await this._editorService.openEditor(input, { pinned: true, activation: EditorActivation.ACTIVATE }) as MultiDiffEditor | undefined; } private _stopPromise: Promise | undefined; diff --git a/src/vs/workbench/contrib/chat/browser/languageModelsConfigurationService.ts b/src/vs/workbench/contrib/chat/browser/languageModelsConfigurationService.ts index 1c695e2ded0..f89cca85b67 100644 --- a/src/vs/workbench/contrib/chat/browser/languageModelsConfigurationService.ts +++ b/src/vs/workbench/contrib/chat/browser/languageModelsConfigurationService.ts @@ -10,7 +10,7 @@ import { Mutable } from '../../../../base/common/types.js'; import { URI } from '../../../../base/common/uri.js'; import { IFileService } from '../../../../platform/files/common/files.js'; import { IUriIdentityService } from '../../../../platform/uriIdentity/common/uriIdentity.js'; -import { IEditorGroupsService } from '../../../services/editor/common/editorGroupsService.js'; +import { IEditorService } from '../../../services/editor/common/editorService.js'; import { ITextEditorService } from '../../../services/textfile/common/textEditorService.js'; import { IUserDataProfileService } from '../../../services/userDataProfile/common/userDataProfile.js'; import { equals } from '../../../../base/common/objects.js'; @@ -46,7 +46,7 @@ export class LanguageModelsConfigurationService extends Disposable implements IL @IFileService private readonly fileService: IFileService, @ITextFileService private readonly textFileService: ITextFileService, @ITextModelService private readonly textModelService: ITextModelService, - @IEditorGroupsService private readonly editorGroupsService: IEditorGroupsService, + @IEditorService private readonly editorService: IEditorService, @ITextEditorService private readonly textEditorService: ITextEditorService, @IUserDataProfileService userDataProfileService: IUserDataProfileService, @IUriIdentityService uriIdentityService: IUriIdentityService, @@ -150,7 +150,7 @@ export class LanguageModelsConfigurationService extends Disposable implements IL } async configureLanguageModels(options?: ConfigureLanguageModelsOptions): Promise { - const editor = await this.editorGroupsService.activeGroup.openEditor(this.textEditorService.createTextEditor({ resource: this.modelsConfigurationFile })); + const editor = await this.editorService.openEditor(this.textEditorService.createTextEditor({ resource: this.modelsConfigurationFile })); if (!editor || !options?.group) { return; } diff --git a/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatChangesSummaryPart.ts b/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatChangesSummaryPart.ts index 4fd9d3e5337..cc7bb156742 100644 --- a/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatChangesSummaryPart.ts +++ b/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatChangesSummaryPart.ts @@ -21,7 +21,6 @@ import { IInstantiationService } from '../../../../../../platform/instantiation/ import { WorkbenchList } from '../../../../../../platform/list/browser/listService.js'; import { IThemeService } from '../../../../../../platform/theme/common/themeService.js'; import { IResourceLabel, ResourceLabels } from '../../../../../browser/labels.js'; -import { IEditorGroupsService } from '../../../../../services/editor/common/editorGroupsService.js'; import { IEditorService } from '../../../../../services/editor/common/editorService.js'; import { createFileIconThemableTreeContainerScope } from '../../../../files/browser/views/explorerView.js'; import { MultiDiffEditorInput } from '../../../../multiDiffEditor/browser/multiDiffEditorInput.js'; @@ -53,7 +52,6 @@ export class ChatCheckpointFileChangesSummaryContentPart extends Disposable impl @IHoverService private readonly hoverService: IHoverService, @IChatService private readonly chatService: IChatService, @IEditorService private readonly editorService: IEditorService, - @IEditorGroupsService private readonly editorGroupsService: IEditorGroupsService, @IInstantiationService private readonly instantiationService: IInstantiationService, ) { super(); @@ -139,7 +137,7 @@ export class ChatCheckpointFileChangesSummaryContentPart extends Disposable impl }), false ); - this.editorGroupsService.activeGroup.openEditor(input); + this.editorService.openEditor(input); dom.EventHelper.stop(e, true); })); } diff --git a/src/vs/workbench/contrib/codeEditor/browser/quickaccess/gotoLineQuickAccess.ts b/src/vs/workbench/contrib/codeEditor/browser/quickaccess/gotoLineQuickAccess.ts index 769547a6891..a32cf22280b 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/quickaccess/gotoLineQuickAccess.ts +++ b/src/vs/workbench/contrib/codeEditor/browser/quickaccess/gotoLineQuickAccess.ts @@ -6,7 +6,7 @@ import { Event } from '../../../../../base/common/event.js'; import { localize, localize2 } from '../../../../../nls.js'; import { IKeyMods, IQuickInputService } from '../../../../../platform/quickinput/common/quickInput.js'; -import { IEditorService } from '../../../../services/editor/common/editorService.js'; +import { IEditorService, SIDE_GROUP } from '../../../../services/editor/common/editorService.js'; import { IRange } from '../../../../../editor/common/core/range.js'; import { AbstractGotoLineQuickAccessProvider } from '../../../../../editor/contrib/quickAccess/browser/gotoLineQuickAccess.js'; import { Registry } from '../../../../../platform/registry/common/platform.js'; @@ -19,7 +19,6 @@ import { ServicesAccessor } from '../../../../../platform/instantiation/common/i import { KeybindingWeight } from '../../../../../platform/keybinding/common/keybindingsRegistry.js'; import { IQuickAccessTextEditorContext } from '../../../../../editor/contrib/quickAccess/browser/editorNavigationQuickAccess.js'; import { ITextEditorOptions } from '../../../../../platform/editor/common/editor.js'; -import { IEditorGroupsService } from '../../../../services/editor/common/editorGroupsService.js'; import { IStorageService } from '../../../../../platform/storage/common/storage.js'; export class GotoLineQuickAccessProvider extends AbstractGotoLineQuickAccessProvider { @@ -28,7 +27,6 @@ export class GotoLineQuickAccessProvider extends AbstractGotoLineQuickAccessProv constructor( @IEditorService private readonly editorService: IEditorService, - @IEditorGroupsService private readonly editorGroupService: IEditorGroupsService, @IConfigurationService private readonly configurationService: IConfigurationService, @IStorageService protected override readonly storageService: IStorageService ) { @@ -60,7 +58,7 @@ export class GotoLineQuickAccessProvider extends AbstractGotoLineQuickAccessProv preserveFocus: options.preserveFocus }; - this.editorGroupService.sideGroup.openEditor(this.editorService.activeEditor, editorOptions); + this.editorService.openEditor(this.editorService.activeEditor, editorOptions, SIDE_GROUP); } // Otherwise let parent handle it diff --git a/src/vs/workbench/contrib/codeEditor/browser/quickaccess/gotoSymbolQuickAccess.ts b/src/vs/workbench/contrib/codeEditor/browser/quickaccess/gotoSymbolQuickAccess.ts index d8dea5ca723..d7ba992c32d 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/quickaccess/gotoSymbolQuickAccess.ts +++ b/src/vs/workbench/contrib/codeEditor/browser/quickaccess/gotoSymbolQuickAccess.ts @@ -6,7 +6,7 @@ import { Event } from '../../../../../base/common/event.js'; import { localize, localize2 } from '../../../../../nls.js'; import { IKeyMods, IQuickPickSeparator, IQuickInputService, IQuickPick, ItemActivation } from '../../../../../platform/quickinput/common/quickInput.js'; -import { IEditorService } from '../../../../services/editor/common/editorService.js'; +import { IEditorService, SIDE_GROUP } from '../../../../services/editor/common/editorService.js'; import { IRange } from '../../../../../editor/common/core/range.js'; import { Registry } from '../../../../../platform/registry/common/platform.js'; import { IQuickAccessRegistry, Extensions as QuickaccessExtensions } from '../../../../../platform/quickinput/common/quickAccess.js'; @@ -29,7 +29,6 @@ import { IQuickAccessTextEditorContext } from '../../../../../editor/contrib/qui import { IOutlineService, OutlineTarget } from '../../../../services/outline/browser/outline.js'; import { isCompositeEditor } from '../../../../../editor/browser/editorBrowser.js'; import { ITextEditorOptions } from '../../../../../platform/editor/common/editor.js'; -import { IEditorGroupsService } from '../../../../services/editor/common/editorGroupsService.js'; import { IOutlineModelService } from '../../../../../editor/contrib/documentSymbols/browser/outlineModel.js'; import { ILanguageFeaturesService } from '../../../../../editor/common/services/languageFeatures.js'; import { ContextKeyExpr } from '../../../../../platform/contextkey/common/contextkey.js'; @@ -42,7 +41,6 @@ export class GotoSymbolQuickAccessProvider extends AbstractGotoSymbolQuickAccess constructor( @IEditorService private readonly editorService: IEditorService, - @IEditorGroupsService private readonly editorGroupService: IEditorGroupsService, @IConfigurationService private readonly configurationService: IConfigurationService, @ILanguageFeaturesService languageFeaturesService: ILanguageFeaturesService, @IOutlineService private readonly outlineService: IOutlineService, @@ -90,7 +88,7 @@ export class GotoSymbolQuickAccessProvider extends AbstractGotoSymbolQuickAccess preserveFocus: options.preserveFocus }; - this.editorGroupService.sideGroup.openEditor(this.editorService.activeEditor, editorOptions); + this.editorService.openEditor(this.editorService.activeEditor, editorOptions, SIDE_GROUP); } // Otherwise let parent handle it diff --git a/src/vs/workbench/contrib/userDataProfile/browser/userDataProfile.ts b/src/vs/workbench/contrib/userDataProfile/browser/userDataProfile.ts index 48652f3e747..1368ec8f482 100644 --- a/src/vs/workbench/contrib/userDataProfile/browser/userDataProfile.ts +++ b/src/vs/workbench/contrib/userDataProfile/browser/userDataProfile.ts @@ -26,7 +26,6 @@ import { EditorPaneDescriptor, IEditorPaneRegistry } from '../../../browser/edit import { EditorExtensions, IEditorFactoryRegistry } from '../../../common/editor.js'; import { UserDataProfilesEditor, UserDataProfilesEditorInput, UserDataProfilesEditorInputSerializer } from './userDataProfilesEditor.js'; import { SyncDescriptor } from '../../../../platform/instantiation/common/descriptors.js'; -import { IEditorGroupsService } from '../../../services/editor/common/editorGroupsService.js'; import { IEditorService, MODAL_GROUP } from '../../../services/editor/common/editorService.js'; import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; import { IHostService } from '../../../services/host/browser/host.js'; @@ -133,14 +132,14 @@ export class UserDataProfilesWorkbenchContribution extends Disposable implements async handleDrop(resource: URI, accessor: ServicesAccessor): Promise { const uriIdentityService = accessor.get(IUriIdentityService); const userDataProfileImportExportService = accessor.get(IUserDataProfileImportExportService); - const editorGroupsService = accessor.get(IEditorGroupsService); + const editorService = accessor.get(IEditorService); const textEditorService = accessor.get(ITextEditorService); const notificationService = accessor.get(INotificationService); if (uriIdentityService.extUri.extname(resource) === `.${PROFILE_EXTENSION}`) { const template = await userDataProfileImportExportService.resolveProfileTemplate(resource); if (!template) { notificationService.warn(localize('invalid profile', "The dropped profile is invalid.")); - editorGroupsService.activeGroup.openEditor(textEditorService.createTextEditor({ resource })); + editorService.openEditor(textEditorService.createTextEditor({ resource })); return true; } const editor = await that.openProfilesEditor(); diff --git a/src/vs/workbench/services/editor/common/editorGroupFinder.ts b/src/vs/workbench/services/editor/common/editorGroupFinder.ts index af149b81028..96f6c8d112f 100644 --- a/src/vs/workbench/services/editor/common/editorGroupFinder.ts +++ b/src/vs/workbench/services/editor/common/editorGroupFinder.ts @@ -38,7 +38,7 @@ export function findGroup(accessor: ServicesAccessor, editor: EditorInputWithOpt function handleGroupResult(group: IEditorGroup, editor: EditorInputWithOptions | IUntypedEditorInput, preferredGroup: PreferredGroup | undefined, editorGroupService: IEditorGroupsService, configurationService: IConfigurationService): [IEditorGroup, EditorActivation | undefined] { const modalEditorPart = editorGroupService.activeModalEditorPart; const modalEditorMode = configurationService.getValue('workbench.editor.useModal'); - if (modalEditorPart && preferredGroup !== MODAL_GROUP && modalEditorMode !== 'on') { + if (modalEditorPart && preferredGroup !== MODAL_GROUP && modalEditorMode !== 'all') { // Only allow to open in modal group if MODAL_GROUP is explicitly requested group = handleModalEditorPart(group, editor, modalEditorPart, editorGroupService); } @@ -176,7 +176,7 @@ function doFindGroup(input: EditorInputWithOptions | IUntypedEditorInput, prefer } // Force modal editor part: redirect to the modal group when setting is 'on' - if (!group && configurationService.getValue('workbench.editor.useModal') === 'on') { + if (!group && configurationService.getValue('workbench.editor.useModal') === 'all') { group = editorGroupService.createModalEditorPart(options?.modal) .then(part => part.activeGroup); } diff --git a/src/vs/workbench/services/editor/common/editorService.ts b/src/vs/workbench/services/editor/common/editorService.ts index 5c7b3802c2e..c0e94a215a2 100644 --- a/src/vs/workbench/services/editor/common/editorService.ts +++ b/src/vs/workbench/services/editor/common/editorService.ts @@ -270,7 +270,7 @@ export interface IEditorService { openEditor(editor: IUntypedEditorInput, group?: PreferredGroup): Promise; /** - * @deprecated using this method is a sign that your editor has not adopted the editor + * Using this method is a sign that your editor has not adopted the editor * resolver yet. Please use `IEditorResolverService.registerEditor` to make your editor * known to the workbench and then use untyped editor inputs for opening: * diff --git a/src/vs/workbench/services/editor/test/browser/modalEditorGroup.test.ts b/src/vs/workbench/services/editor/test/browser/modalEditorGroup.test.ts index 1c0db5ecf58..fe6a33802b2 100644 --- a/src/vs/workbench/services/editor/test/browser/modalEditorGroup.test.ts +++ b/src/vs/workbench/services/editor/test/browser/modalEditorGroup.test.ts @@ -506,13 +506,13 @@ suite('Modal Editor Group', () => { modalPart.close(); }); - suite('useModal: on', () => { + suite('useModal: all', () => { test('findGroup creates modal and returns its active group', async () => { const instantiationService = workbenchInstantiationService({ contextKeyService: instantiationService => instantiationService.createInstance(MockScopableContextKeyService) }, disposables); instantiationService.invokeFunction(accessor => Registry.as(EditorExtensions.EditorFactory).start(accessor)); const configurationService = new TestConfigurationService(); - await configurationService.setUserConfiguration('workbench.editor.useModal', 'on'); + await configurationService.setUserConfiguration('workbench.editor.useModal', 'all'); instantiationService.stub(IConfigurationService, configurationService); const parts = await createEditorParts(instantiationService, disposables); instantiationService.stub(IEditorGroupsService, parts); @@ -536,7 +536,7 @@ suite('Modal Editor Group', () => { const instantiationService = workbenchInstantiationService({ contextKeyService: instantiationService => instantiationService.createInstance(MockScopableContextKeyService) }, disposables); instantiationService.invokeFunction(accessor => Registry.as(EditorExtensions.EditorFactory).start(accessor)); const configurationService = new TestConfigurationService(); - await configurationService.setUserConfiguration('workbench.editor.useModal', 'on'); + await configurationService.setUserConfiguration('workbench.editor.useModal', 'all'); instantiationService.stub(IConfigurationService, configurationService); const parts = await createEditorParts(instantiationService, disposables); instantiationService.stub(IEditorGroupsService, parts); @@ -559,7 +559,7 @@ suite('Modal Editor Group', () => { modalPart.close(); }); - test('findGroup auto-closes modal when setting is not on', async () => { + test('findGroup auto-closes modal when setting is not all', async () => { const instantiationService = workbenchInstantiationService({ contextKeyService: instantiationService => instantiationService.createInstance(MockScopableContextKeyService) }, disposables); instantiationService.invokeFunction(accessor => Registry.as(EditorExtensions.EditorFactory).start(accessor)); const configurationService = new TestConfigurationService(); diff --git a/src/vs/workbench/services/workingCopy/browser/workingCopyBackupTracker.ts b/src/vs/workbench/services/workingCopy/browser/workingCopyBackupTracker.ts index a0b33b253be..b57cf4c6507 100644 --- a/src/vs/workbench/services/workingCopy/browser/workingCopyBackupTracker.ts +++ b/src/vs/workbench/services/workingCopy/browser/workingCopyBackupTracker.ts @@ -12,7 +12,6 @@ import { ILogService } from '../../../../platform/log/common/log.js'; import { WorkingCopyBackupTracker } from '../common/workingCopyBackupTracker.js'; import { IWorkingCopyEditorService } from '../common/workingCopyEditorService.js'; import { IEditorService } from '../../editor/common/editorService.js'; -import { IEditorGroupsService } from '../../editor/common/editorGroupsService.js'; export class BrowserWorkingCopyBackupTracker extends WorkingCopyBackupTracker implements IWorkbenchContribution { @@ -26,9 +25,8 @@ export class BrowserWorkingCopyBackupTracker extends WorkingCopyBackupTracker im @ILogService logService: ILogService, @IWorkingCopyEditorService workingCopyEditorService: IWorkingCopyEditorService, @IEditorService editorService: IEditorService, - @IEditorGroupsService editorGroupService: IEditorGroupsService ) { - super(workingCopyBackupService, workingCopyService, logService, lifecycleService, filesConfigurationService, workingCopyEditorService, editorService, editorGroupService); + super(workingCopyBackupService, workingCopyService, logService, lifecycleService, filesConfigurationService, workingCopyEditorService, editorService); } protected onFinalBeforeShutdown(reason: ShutdownReason): boolean { diff --git a/src/vs/workbench/services/workingCopy/common/workingCopyBackupTracker.ts b/src/vs/workbench/services/workingCopy/common/workingCopyBackupTracker.ts index e032ebe1bdb..eb7608d9fe1 100644 --- a/src/vs/workbench/services/workingCopy/common/workingCopyBackupTracker.ts +++ b/src/vs/workbench/services/workingCopy/common/workingCopyBackupTracker.ts @@ -16,7 +16,6 @@ import { Promises } from '../../../../base/common/async.js'; import { IEditorService } from '../../editor/common/editorService.js'; import { EditorsOrder } from '../../../common/editor.js'; import { EditorInput } from '../../../common/editor/editorInput.js'; -import { IEditorGroupsService } from '../../editor/common/editorGroupsService.js'; /** * The working copy backup tracker deals with: @@ -35,7 +34,6 @@ export abstract class WorkingCopyBackupTracker extends Disposable { protected readonly filesConfigurationService: IFilesConfigurationService, private readonly workingCopyEditorService: IWorkingCopyEditorService, protected readonly editorService: IEditorService, - private readonly editorGroupService: IEditorGroupsService ) { super(); @@ -397,7 +395,7 @@ export abstract class WorkingCopyBackupTracker extends Disposable { // Ensure editors are opened for each backup without editor // in the background without stealing focus if (nonOpenedEditorsForBackups.size > 0) { - await this.editorGroupService.activeGroup.openEditors([...nonOpenedEditorsForBackups].map(nonOpenedEditorForBackup => ({ + await this.editorService.openEditors([...nonOpenedEditorsForBackups].map(nonOpenedEditorForBackup => ({ editor: nonOpenedEditorForBackup, options: { pinned: true, diff --git a/src/vs/workbench/services/workingCopy/electron-browser/workingCopyBackupTracker.ts b/src/vs/workbench/services/workingCopy/electron-browser/workingCopyBackupTracker.ts index ff7f0885ed4..6e99537a4a6 100644 --- a/src/vs/workbench/services/workingCopy/electron-browser/workingCopyBackupTracker.ts +++ b/src/vs/workbench/services/workingCopy/electron-browser/workingCopyBackupTracker.ts @@ -24,7 +24,6 @@ import { CancellationToken, CancellationTokenSource } from '../../../../base/com import { IProgressService, ProgressLocation } from '../../../../platform/progress/common/progress.js'; import { Promises, raceCancellation } from '../../../../base/common/async.js'; import { IWorkingCopyEditorService } from '../common/workingCopyEditorService.js'; -import { IEditorGroupsService } from '../../editor/common/editorGroupsService.js'; export class NativeWorkingCopyBackupTracker extends WorkingCopyBackupTracker implements IWorkbenchContribution { @@ -44,9 +43,8 @@ export class NativeWorkingCopyBackupTracker extends WorkingCopyBackupTracker imp @IProgressService private readonly progressService: IProgressService, @IWorkingCopyEditorService workingCopyEditorService: IWorkingCopyEditorService, @IEditorService editorService: IEditorService, - @IEditorGroupsService editorGroupService: IEditorGroupsService ) { - super(workingCopyBackupService, workingCopyService, logService, lifecycleService, filesConfigurationService, workingCopyEditorService, editorService, editorGroupService); + super(workingCopyBackupService, workingCopyService, logService, lifecycleService, filesConfigurationService, workingCopyEditorService, editorService); } protected async onFinalBeforeShutdown(reason: ShutdownReason): Promise { diff --git a/src/vs/workbench/services/workingCopy/test/browser/workingCopyBackupTracker.test.ts b/src/vs/workbench/services/workingCopy/test/browser/workingCopyBackupTracker.test.ts index f86b9a6adec..3288604f0a9 100644 --- a/src/vs/workbench/services/workingCopy/test/browser/workingCopyBackupTracker.test.ts +++ b/src/vs/workbench/services/workingCopy/test/browser/workingCopyBackupTracker.test.ts @@ -54,9 +54,8 @@ suite('WorkingCopyBackupTracker (browser)', function () { @ILogService logService: ILogService, @IWorkingCopyEditorService workingCopyEditorService: IWorkingCopyEditorService, @IEditorService editorService: IEditorService, - @IEditorGroupsService editorGroupService: IEditorGroupsService ) { - super(workingCopyBackupService, filesConfigurationService, workingCopyService, lifecycleService, logService, workingCopyEditorService, editorService, editorGroupService); + super(workingCopyBackupService, filesConfigurationService, workingCopyService, lifecycleService, logService, workingCopyEditorService, editorService); } protected override getBackupScheduleDelay(): number { diff --git a/src/vs/workbench/services/workingCopy/test/electron-browser/workingCopyBackupTracker.test.ts b/src/vs/workbench/services/workingCopy/test/electron-browser/workingCopyBackupTracker.test.ts index a7ab03c1289..bc7ce7b557f 100644 --- a/src/vs/workbench/services/workingCopy/test/electron-browser/workingCopyBackupTracker.test.ts +++ b/src/vs/workbench/services/workingCopy/test/electron-browser/workingCopyBackupTracker.test.ts @@ -64,9 +64,8 @@ suite('WorkingCopyBackupTracker (native)', function () { @IEnvironmentService environmentService: IEnvironmentService, @IProgressService progressService: IProgressService, @IWorkingCopyEditorService workingCopyEditorService: IWorkingCopyEditorService, - @IEditorGroupsService editorGroupService: IEditorGroupsService ) { - super(workingCopyBackupService, filesConfigurationService, workingCopyService, lifecycleService, fileDialogService, dialogService, contextService, nativeHostService, logService, environmentService, progressService, workingCopyEditorService, editorService, editorGroupService); + super(workingCopyBackupService, filesConfigurationService, workingCopyService, lifecycleService, fileDialogService, dialogService, contextService, nativeHostService, logService, environmentService, progressService, workingCopyEditorService, editorService); } protected override getBackupScheduleDelay(): number {