diff --git a/eslint.config.js b/eslint.config.js index c6e8a6af06b..a9ca9781ad1 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1906,6 +1906,23 @@ export default tseslint.config( '*' // node.js ] }, + { + 'target': 'src/vs/agentic/workbench.common.main.ts', + 'layer': 'browser', + 'restrictions': [ + 'vs/base/~', + 'vs/base/parts/*/~', + 'vs/platform/*/~', + 'vs/editor/~', + 'vs/editor/contrib/*/~', + 'vs/editor/editor.all.js', + 'vs/workbench/~', + 'vs/workbench/api/~', + 'vs/workbench/services/*/~', + 'vs/workbench/contrib/*/~', + 'vs/workbench/contrib/terminal/terminal.all.js' + ] + }, { 'target': 'src/vs/agentic/workbench.desktop.main.ts', 'layer': 'electron-browser', @@ -1922,7 +1939,7 @@ export default tseslint.config( 'vs/workbench/api/~', 'vs/workbench/services/*/~', 'vs/workbench/contrib/*/~', - 'vs/workbench/workbench.common.main.js' + 'vs/agentic/workbench.common.main.js' ] }, { diff --git a/src/vs/agentic/workbench.common.main.ts b/src/vs/agentic/workbench.common.main.ts new file mode 100644 index 00000000000..7e8c8e57a47 --- /dev/null +++ b/src/vs/agentic/workbench.common.main.ts @@ -0,0 +1,439 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +//#region --- editor/workbench core + +import '../editor/editor.all.js'; + +import '../workbench/api/browser/extensionHost.contribution.js'; +import '../workbench/browser/workbench.contribution.js'; + +//#endregion + + +//#region --- workbench actions + +import '../workbench/browser/actions/textInputActions.js'; +import '../workbench/browser/actions/developerActions.js'; +import '../workbench/browser/actions/helpActions.js'; +import '../workbench/browser/actions/listCommands.js'; +import '../workbench/browser/actions/navigationActions.js'; +import '../workbench/browser/actions/windowActions.js'; +import '../workbench/browser/actions/workspaceActions.js'; +import '../workbench/browser/actions/workspaceCommands.js'; +import '../workbench/browser/actions/quickAccessActions.js'; +import '../workbench/browser/actions/widgetNavigationCommands.js'; + +//#endregion + + +//#region --- API Extension Points + +import '../workbench/services/actions/common/menusExtensionPoint.js'; +import '../workbench/api/common/configurationExtensionPoint.js'; +import '../workbench/api/browser/viewsExtensionPoint.js'; + +//#endregion + + +//#region --- workbench parts + +import '../workbench/browser/parts/editor/editor.contribution.js'; +import '../workbench/browser/parts/editor/editorParts.js'; +import '../workbench/browser/parts/banner/bannerPart.js'; +import '../workbench/browser/parts/statusbar/statusbarPart.js'; + +//#endregion + + +//#region --- workbench services + +import '../platform/actions/common/actions.contribution.js'; +import '../platform/undoRedo/common/undoRedoService.js'; +import '../platform/mcp/common/mcpResourceScannerService.js'; +import '../workbench/services/workspaces/common/editSessionIdentityService.js'; +import '../workbench/services/workspaces/common/canonicalUriService.js'; +import '../workbench/services/extensions/browser/extensionUrlHandler.js'; +import '../workbench/services/keybinding/common/keybindingEditing.js'; +import '../workbench/services/decorations/browser/decorationsService.js'; +import '../workbench/services/dialogs/common/dialogService.js'; +import '../workbench/services/progress/browser/progressService.js'; +import '../workbench/services/editor/browser/codeEditorService.js'; +import '../workbench/services/preferences/browser/preferencesService.js'; +import '../workbench/services/configuration/common/jsonEditingService.js'; +import '../workbench/services/textmodelResolver/common/textModelResolverService.js'; +import '../workbench/services/editor/browser/editorService.js'; +import '../workbench/services/editor/browser/editorResolverService.js'; +import '../workbench/services/aiEmbeddingVector/common/aiEmbeddingVectorService.js'; +import '../workbench/services/aiRelatedInformation/common/aiRelatedInformationService.js'; +import '../workbench/services/aiSettingsSearch/common/aiSettingsSearchService.js'; +import '../workbench/services/history/browser/historyService.js'; +import '../workbench/services/activity/browser/activityService.js'; +import '../workbench/services/keybinding/browser/keybindingService.js'; +import '../workbench/services/untitled/common/untitledTextEditorService.js'; +import '../workbench/services/textresourceProperties/common/textResourcePropertiesService.js'; +import '../workbench/services/textfile/common/textEditorService.js'; +import '../workbench/services/language/common/languageService.js'; +import '../workbench/services/model/common/modelService.js'; +import '../workbench/services/notebook/common/notebookDocumentService.js'; +import '../workbench/services/commands/common/commandService.js'; +import '../workbench/services/themes/browser/workbenchThemeService.js'; +import '../workbench/services/label/common/labelService.js'; +import '../workbench/services/extensions/common/extensionManifestPropertiesService.js'; +import '../workbench/services/extensionManagement/common/extensionGalleryService.js'; +import '../workbench/services/extensionManagement/browser/extensionEnablementService.js'; +import '../workbench/services/extensionManagement/browser/builtinExtensionsScannerService.js'; +import '../workbench/services/extensionRecommendations/common/extensionIgnoredRecommendationsService.js'; +import '../workbench/services/extensionRecommendations/common/workspaceExtensionsConfig.js'; +import '../workbench/services/extensionManagement/common/extensionFeaturesManagemetService.js'; +import '../workbench/services/notification/common/notificationService.js'; +import '../workbench/services/userDataSync/common/userDataSyncUtil.js'; +import '../workbench/services/userDataProfile/browser/userDataProfileImportExportService.js'; +import '../workbench/services/userDataProfile/browser/userDataProfileManagement.js'; +import '../workbench/services/userDataProfile/common/remoteUserDataProfiles.js'; +import '../workbench/services/remote/common/remoteExplorerService.js'; +import '../workbench/services/remote/common/remoteExtensionsScanner.js'; +import '../workbench/services/terminal/common/embedderTerminalService.js'; +import '../workbench/services/workingCopy/common/workingCopyService.js'; +import '../workbench/services/workingCopy/common/workingCopyFileService.js'; +import '../workbench/services/workingCopy/common/workingCopyEditorService.js'; +import '../workbench/services/filesConfiguration/common/filesConfigurationService.js'; +import '../workbench/services/views/browser/viewDescriptorService.js'; +import '../workbench/services/views/browser/viewsService.js'; +import '../workbench/services/quickinput/browser/quickInputService.js'; +import '../workbench/services/userDataSync/browser/userDataSyncWorkbenchService.js'; +import '../workbench/services/authentication/browser/authenticationService.js'; +import '../workbench/services/authentication/browser/authenticationExtensionsService.js'; +import '../workbench/services/authentication/browser/authenticationUsageService.js'; +import '../workbench/services/authentication/browser/authenticationAccessService.js'; +import '../workbench/services/authentication/browser/authenticationMcpUsageService.js'; +import '../workbench/services/authentication/browser/authenticationMcpAccessService.js'; +import '../workbench/services/authentication/browser/authenticationMcpService.js'; +import '../workbench/services/authentication/browser/dynamicAuthenticationProviderStorageService.js'; +import '../workbench/services/authentication/browser/authenticationQueryService.js'; +import '../platform/hover/browser/hoverService.js'; +import '../platform/userInteraction/browser/userInteractionServiceImpl.js'; +import '../workbench/services/assignment/common/assignmentService.js'; +import '../workbench/services/outline/browser/outlineService.js'; +import '../workbench/services/languageDetection/browser/languageDetectionWorkerServiceImpl.js'; +import '../editor/common/services/languageFeaturesService.js'; +import '../editor/common/services/semanticTokensStylingService.js'; +import '../editor/common/services/treeViewsDndService.js'; +import '../workbench/services/textMate/browser/textMateTokenizationFeature.contribution.js'; +import '../workbench/services/treeSitter/browser/treeSitter.contribution.js'; +import '../workbench/services/userActivity/common/userActivityService.js'; +import '../workbench/services/userActivity/browser/userActivityBrowser.js'; +import '../workbench/services/userAttention/browser/userAttentionBrowser.js'; +import '../workbench/services/editor/browser/editorPaneService.js'; +import '../workbench/services/editor/common/customEditorLabelService.js'; +import '../workbench/services/dataChannel/browser/dataChannelService.js'; +import '../workbench/services/inlineCompletions/common/inlineCompletionsUnification.js'; +import '../workbench/services/chat/common/chatEntitlementService.js'; +import '../workbench/services/log/common/defaultLogLevels.js'; + +import { InstantiationType, registerSingleton } from '../platform/instantiation/common/extensions.js'; +import { GlobalExtensionEnablementService } from '../platform/extensionManagement/common/extensionEnablementService.js'; +import { IAllowedExtensionsService, IGlobalExtensionEnablementService } from '../platform/extensionManagement/common/extensionManagement.js'; +import { ContextViewService } from '../platform/contextview/browser/contextViewService.js'; +import { IContextViewService } from '../platform/contextview/browser/contextView.js'; +import { IListService, ListService } from '../platform/list/browser/listService.js'; +import { MarkerDecorationsService } from '../editor/common/services/markerDecorationsService.js'; +import { IMarkerDecorationsService } from '../editor/common/services/markerDecorations.js'; +import { IMarkerService } from '../platform/markers/common/markers.js'; +import { MarkerService } from '../platform/markers/common/markerService.js'; +import { ContextKeyService } from '../platform/contextkey/browser/contextKeyService.js'; +import { IContextKeyService } from '../platform/contextkey/common/contextkey.js'; +import { ITextResourceConfigurationService } from '../editor/common/services/textResourceConfiguration.js'; +import { TextResourceConfigurationService } from '../editor/common/services/textResourceConfigurationService.js'; +import { IDownloadService } from '../platform/download/common/download.js'; +import { DownloadService } from '../platform/download/common/downloadService.js'; +import { OpenerService } from '../editor/browser/services/openerService.js'; +import { IOpenerService } from '../platform/opener/common/opener.js'; +import { IgnoredExtensionsManagementService, IIgnoredExtensionsManagementService } from '../platform/userDataSync/common/ignoredExtensions.js'; +import { ExtensionStorageService, IExtensionStorageService } from '../platform/extensionManagement/common/extensionStorage.js'; +import { IUserDataSyncLogService } from '../platform/userDataSync/common/userDataSync.js'; +import { UserDataSyncLogService } from '../platform/userDataSync/common/userDataSyncLog.js'; +import { AllowedExtensionsService } from '../platform/extensionManagement/common/allowedExtensionsService.js'; +import { IAllowedMcpServersService, IMcpGalleryService } from '../platform/mcp/common/mcpManagement.js'; +import { McpGalleryService } from '../platform/mcp/common/mcpGalleryService.js'; +import { AllowedMcpServersService } from '../platform/mcp/common/allowedMcpServersService.js'; +import { IWebWorkerService } from '../platform/webWorker/browser/webWorkerService.js'; +import { WebWorkerService } from '../platform/webWorker/browser/webWorkerServiceImpl.js'; + +registerSingleton(IUserDataSyncLogService, UserDataSyncLogService, InstantiationType.Delayed); +registerSingleton(IAllowedExtensionsService, AllowedExtensionsService, InstantiationType.Delayed); +registerSingleton(IIgnoredExtensionsManagementService, IgnoredExtensionsManagementService, InstantiationType.Delayed); +registerSingleton(IGlobalExtensionEnablementService, GlobalExtensionEnablementService, InstantiationType.Delayed); +registerSingleton(IExtensionStorageService, ExtensionStorageService, InstantiationType.Delayed); +registerSingleton(IContextViewService, ContextViewService, InstantiationType.Delayed); +registerSingleton(IListService, ListService, InstantiationType.Delayed); +registerSingleton(IMarkerDecorationsService, MarkerDecorationsService, InstantiationType.Delayed); +registerSingleton(IMarkerService, MarkerService, InstantiationType.Delayed); +registerSingleton(IContextKeyService, ContextKeyService, InstantiationType.Delayed); +registerSingleton(ITextResourceConfigurationService, TextResourceConfigurationService, InstantiationType.Delayed); +registerSingleton(IDownloadService, DownloadService, InstantiationType.Delayed); +registerSingleton(IOpenerService, OpenerService, InstantiationType.Delayed); +registerSingleton(IWebWorkerService, WebWorkerService, InstantiationType.Delayed); +registerSingleton(IMcpGalleryService, McpGalleryService, InstantiationType.Delayed); +registerSingleton(IAllowedMcpServersService, AllowedMcpServersService, InstantiationType.Delayed); + +//#endregion + + +//#region --- workbench contributions + +// Default Account +import '../workbench/services/accounts/browser/defaultAccount.js'; + +// Telemetry +import '../workbench/contrib/telemetry/browser/telemetry.contribution.js'; + +// Preferences +import '../workbench/contrib/preferences/browser/preferences.contribution.js'; +import '../workbench/contrib/preferences/browser/keybindingsEditorContribution.js'; +import '../workbench/contrib/preferences/browser/preferencesSearch.js'; + +// Performance +import '../workbench/contrib/performance/browser/performance.contribution.js'; + +// Notebook +import '../workbench/contrib/notebook/browser/notebook.contribution.js'; + +// Speech +import '../workbench/contrib/speech/browser/speech.contribution.js'; + +// Chat +import '../workbench/contrib/chat/browser/chat.contribution.js'; +import '../workbench/contrib/inlineChat/browser/inlineChat.contribution.js'; +import '../workbench/contrib/mcp/browser/mcp.contribution.js'; +import '../workbench/contrib/chat/browser/chatSessions/chatSessions.contribution.js'; +import '../workbench/contrib/chat/browser/contextContrib/chatContext.contribution.js'; + +// Interactive +import '../workbench/contrib/interactive/browser/interactive.contribution.js'; + +// repl +import '../workbench/contrib/replNotebook/browser/repl.contribution.js'; + +// Testing +import '../workbench/contrib/testing/browser/testing.contribution.js'; + +// Logs +import '../workbench/contrib/logs/common/logs.contribution.js'; + +// Quickaccess +import '../workbench/contrib/quickaccess/browser/quickAccess.contribution.js'; + +// Explorer +import '../workbench/contrib/files/browser/explorerViewlet.js'; +import '../workbench/contrib/files/browser/fileActions.contribution.js'; +import '../workbench/contrib/files/browser/files.contribution.js'; + +// Bulk Edit +import '../workbench/contrib/bulkEdit/browser/bulkEditService.js'; +import '../workbench/contrib/bulkEdit/browser/preview/bulkEdit.contribution.js'; + +// Rename Symbol Tracker for Inline completions. +import '../workbench/contrib/inlineCompletions/browser/renameSymbolTrackerService.js'; + +// Search +import '../workbench/contrib/search/browser/search.contribution.js'; +import '../workbench/contrib/search/browser/searchView.js'; + +// Search Editor +import '../workbench/contrib/searchEditor/browser/searchEditor.contribution.js'; + +// Sash +import '../workbench/contrib/sash/browser/sash.contribution.js'; + +// SCM +import '../workbench/contrib/scm/browser/scm.contribution.js'; + +// Debug +import '../workbench/contrib/debug/browser/debug.contribution.js'; +import '../workbench/contrib/debug/browser/debugEditorContribution.js'; +import '../workbench/contrib/debug/browser/breakpointEditorContribution.js'; +import '../workbench/contrib/debug/browser/callStackEditorContribution.js'; +import '../workbench/contrib/debug/browser/repl.js'; +import '../workbench/contrib/debug/browser/debugViewlet.js'; + +// Markers +import '../workbench/contrib/markers/browser/markers.contribution.js'; + +// Process Explorer +import '../workbench/contrib/processExplorer/browser/processExplorer.contribution.js'; + +// Merge Editor +import '../workbench/contrib/mergeEditor/browser/mergeEditor.contribution.js'; + +// Multi Diff Editor +import '../workbench/contrib/multiDiffEditor/browser/multiDiffEditor.contribution.js'; + +// Commands +import '../workbench/contrib/commands/common/commands.contribution.js'; + +// Comments +import '../workbench/contrib/comments/browser/comments.contribution.js'; + +// URL Support +import '../workbench/contrib/url/browser/url.contribution.js'; + +// Webview +import '../workbench/contrib/webview/browser/webview.contribution.js'; +import '../workbench/contrib/webviewPanel/browser/webviewPanel.contribution.js'; +import '../workbench/contrib/webviewView/browser/webviewView.contribution.js'; +import '../workbench/contrib/customEditor/browser/customEditor.contribution.js'; + +// External Uri Opener +import '../workbench/contrib/externalUriOpener/common/externalUriOpener.contribution.js'; + +// Extensions Management +import '../workbench/contrib/extensions/browser/extensions.contribution.js'; +import '../workbench/contrib/extensions/browser/extensionsViewlet.js'; + +// Output View +import '../workbench/contrib/output/browser/output.contribution.js'; +import '../workbench/contrib/output/browser/outputView.js'; + +// Terminal +import '../workbench/contrib/terminal/terminal.all.js'; + +// External terminal +import '../workbench/contrib/externalTerminal/browser/externalTerminal.contribution.js'; + +// Relauncher +import '../workbench/contrib/relauncher/browser/relauncher.contribution.js'; + +// Tasks +import '../workbench/contrib/tasks/browser/task.contribution.js'; + +// Remote +import '../workbench/contrib/remote/common/remote.contribution.js'; +import '../workbench/contrib/remote/browser/remote.contribution.js'; + +// Emmet +import '../workbench/contrib/emmet/browser/emmet.contribution.js'; + +// CodeEditor Contributions +import '../workbench/contrib/codeEditor/browser/codeEditor.contribution.js'; + +// Markdown +import '../workbench/contrib/markdown/browser/markdown.contribution.js'; + +// Keybindings Contributions +import '../workbench/contrib/keybindings/browser/keybindings.contribution.js'; + +// Snippets +import '../workbench/contrib/snippets/browser/snippets.contribution.js'; + +// Formatter Help +import '../workbench/contrib/format/browser/format.contribution.js'; + +// Folding +import '../workbench/contrib/folding/browser/folding.contribution.js'; + +// Limit Indicator +import '../workbench/contrib/limitIndicator/browser/limitIndicator.contribution.js'; + +// Inlay Hint Accessibility +import '../workbench/contrib/inlayHints/browser/inlayHintsAccessibilty.js'; + +// Themes +import '../workbench/contrib/themes/browser/themes.contribution.js'; + +// Update +import '../workbench/contrib/update/browser/update.contribution.js'; + +// Surveys +import '../workbench/contrib/surveys/browser/nps.contribution.js'; +import '../workbench/contrib/surveys/browser/languageSurveys.contribution.js'; + +// Welcome +import '../workbench/contrib/welcomeGettingStarted/browser/gettingStarted.contribution.js'; +import '../workbench/contrib/welcomeAgentSessions/browser/agentSessionsWelcome.contribution.js'; +import '../workbench/contrib/welcomeWalkthrough/browser/walkThrough.contribution.js'; +import '../workbench/contrib/welcomeViews/common/viewsWelcome.contribution.js'; +import '../workbench/contrib/welcomeViews/common/newFile.contribution.js'; + +// Call Hierarchy +import '../workbench/contrib/callHierarchy/browser/callHierarchy.contribution.js'; + +// Type Hierarchy +import '../workbench/contrib/typeHierarchy/browser/typeHierarchy.contribution.js'; + +// Outline +import '../workbench/contrib/codeEditor/browser/outline/documentSymbolsOutline.js'; +import '../workbench/contrib/outline/browser/outline.contribution.js'; + +// Language Detection +import '../workbench/contrib/languageDetection/browser/languageDetection.contribution.js'; + +// Language Status +import '../workbench/contrib/languageStatus/browser/languageStatus.contribution.js'; + +// Authentication +import '../workbench/contrib/authentication/browser/authentication.contribution.js'; + +// User Data Sync +import '../workbench/contrib/userDataSync/browser/userDataSync.contribution.js'; + +// User Data Profiles +import '../workbench/contrib/userDataProfile/browser/userDataProfile.contribution.js'; + +// Continue Edit Session +import '../workbench/contrib/editSessions/browser/editSessions.contribution.js'; + +// Remote Coding Agents +import '../workbench/contrib/remoteCodingAgents/browser/remoteCodingAgents.contribution.js'; + +// Code Actions +import '../workbench/contrib/codeActions/browser/codeActions.contribution.js'; + +// Timeline +import '../workbench/contrib/timeline/browser/timeline.contribution.js'; + +// Local History +import '../workbench/contrib/localHistory/browser/localHistory.contribution.js'; + +// Workspace +import '../workbench/contrib/workspace/browser/workspace.contribution.js'; + +// Workspaces +import '../workbench/contrib/workspaces/browser/workspaces.contribution.js'; + +// List +import '../workbench/contrib/list/browser/list.contribution.js'; + +// Accessibility Signals +import '../workbench/contrib/accessibilitySignals/browser/accessibilitySignal.contribution.js'; + +// Bracket Pair Colorizer 2 Telemetry +import '../workbench/contrib/bracketPairColorizer2Telemetry/browser/bracketPairColorizer2Telemetry.contribution.js'; + +// Accessibility +import '../workbench/contrib/accessibility/browser/accessibility.contribution.js'; + +// Metered Connection +import '../workbench/contrib/meteredConnection/browser/meteredConnection.contribution.js'; + +// Share +import '../workbench/contrib/share/browser/share.contribution.js'; + +// Synchronized Scrolling +import '../workbench/contrib/scrollLocking/browser/scrollLocking.contribution.js'; + +// Inline Completions +import '../workbench/contrib/inlineCompletions/browser/inlineCompletions.contribution.js'; + +// Drop or paste into +import '../workbench/contrib/dropOrPasteInto/browser/dropOrPasteInto.contribution.js'; + +// Edit Telemetry +import '../workbench/contrib/editTelemetry/browser/editTelemetry.contribution.js'; + +// Opener +import '../workbench/contrib/opener/browser/opener.contribution.js'; + +//#endregion diff --git a/src/vs/agentic/workbench.desktop.main.ts b/src/vs/agentic/workbench.desktop.main.ts index 5255457cdbe..27aa2e0664e 100644 --- a/src/vs/agentic/workbench.desktop.main.ts +++ b/src/vs/agentic/workbench.desktop.main.ts @@ -12,7 +12,7 @@ //#region --- workbench common -import '../workbench/workbench.common.main.js'; +import './workbench.common.main.js'; //#endregion diff --git a/src/vs/workbench/browser/actions/layoutActions.ts b/src/vs/workbench/browser/actions/layoutActions.ts index 86ffda15a0e..fea736cad03 100644 --- a/src/vs/workbench/browser/actions/layoutActions.ts +++ b/src/vs/workbench/browser/actions/layoutActions.ts @@ -8,7 +8,7 @@ import { MenuId, MenuRegistry, registerAction2, Action2 } from '../../../platfor import { Categories } from '../../../platform/action/common/actionCommonCategories.js'; import { IConfigurationService } from '../../../platform/configuration/common/configuration.js'; import { alert } from '../../../base/browser/ui/aria/aria.js'; -import { ActivityBarPosition, EditorActionsLocation, EditorTabsMode, IWorkbenchLayoutService, LayoutSettings, Parts, Position, ZenModeSettings, isHorizontal, positionToString } from '../../services/layout/browser/layoutService.js'; +import { EditorActionsLocation, EditorTabsMode, IWorkbenchLayoutService, LayoutSettings, Parts, Position, ZenModeSettings, positionToString } from '../../services/layout/browser/layoutService.js'; import { ServicesAccessor, IInstantiationService } from '../../../platform/instantiation/common/instantiation.js'; import { KeyMod, KeyCode, KeyChord } from '../../../base/common/keyCodes.js'; import { isWindows, isLinux, isWeb, isMacintosh, isNative } from '../../../base/common/platform.js'; @@ -21,9 +21,9 @@ import { QuickPickItem, IQuickInputService, IQuickPickItem, IQuickPickSeparator, import { IDialogService } from '../../../platform/dialogs/common/dialogs.js'; import { IPaneCompositePartService } from '../../services/panecomposite/browser/panecomposite.js'; import { ToggleAuxiliaryBarAction } from '../parts/auxiliarybar/auxiliaryBarActions.js'; -import { closeIcon, TogglePanelAction } from '../parts/panel/panelActions.js'; +import { TogglePanelAction } from '../parts/panel/panelActions.js'; import { ICommandService } from '../../../platform/commands/common/commands.js'; -import { AuxiliaryBarVisibleContext, PanelAlignmentContext, PanelVisibleContext, SideBarVisibleContext, FocusedViewContext, InEditorZenModeContext, IsMainEditorCenteredLayoutContext, MainEditorAreaVisibleContext, IsMainWindowFullscreenContext, PanelPositionContext, IsAuxiliaryWindowFocusedContext, TitleBarStyleContext, IsAuxiliaryWindowContext, PanelMaximizedContext, AuxiliaryBarMaximizedContext } from '../../common/contextkeys.js'; +import { AuxiliaryBarVisibleContext, PanelAlignmentContext, PanelVisibleContext, SideBarVisibleContext, FocusedViewContext, InEditorZenModeContext, IsMainEditorCenteredLayoutContext, MainEditorAreaVisibleContext, IsMainWindowFullscreenContext, PanelPositionContext, IsAuxiliaryWindowFocusedContext, TitleBarStyleContext, IsAuxiliaryWindowContext } from '../../common/contextkeys.js'; import { Codicon } from '../../../base/common/codicons.js'; import { ThemeIcon } from '../../../base/common/themables.js'; import { DisposableStore } from '../../../base/common/lifecycle.js'; @@ -35,47 +35,35 @@ import { MenuSettings, TitlebarStyle } from '../../../platform/window/common/win import { IPreferencesService } from '../../services/preferences/common/preferences.js'; import { QuickInputAlignmentContextKey } from '../../../platform/quickinput/browser/quickInput.js'; import { IEditorGroupsService } from '../../services/editor/common/editorGroupsService.js'; -import { INotificationService } from '../../../platform/notification/common/notification.js'; -import { SwitchCompositeViewAction } from '../parts/compositeBarActions.js'; // Register Icons const menubarIcon = registerIcon('menuBar', Codicon.layoutMenubar, localize('menuBarIcon', "Represents the menu bar")); const activityBarLeftIcon = registerIcon('activity-bar-left', Codicon.layoutActivitybarLeft, localize('activityBarLeft', "Represents the activity bar in the left position")); const activityBarRightIcon = registerIcon('activity-bar-right', Codicon.layoutActivitybarRight, localize('activityBarRight', "Represents the activity bar in the right position")); -const statusBarIcon = registerIcon('statusBar', Codicon.layoutStatusbar, localize('statusBarIcon', "Represents the status bar")); -const quickInputAlignmentTopIcon = registerIcon('quickInputAlignmentTop', Codicon.arrowUp, localize('quickInputAlignmentTop', "Represents quick input alignment set to the top")); -const quickInputAlignmentCenterIcon = registerIcon('quickInputAlignmentCenter', Codicon.circle, localize('quickInputAlignmentCenter', "Represents quick input alignment set to the center")); - -const panelAlignmentLeftIcon = registerIcon('panel-align-left', Codicon.layoutPanelLeft, localize('panelBottomLeft', "Represents the bottom panel alignment set to the left")); -const panelAlignmentRightIcon = registerIcon('panel-align-right', Codicon.layoutPanelRight, localize('panelBottomRight', "Represents the bottom panel alignment set to the right")); -const panelAlignmentCenterIcon = registerIcon('panel-align-center', Codicon.layoutPanelCenter, localize('panelBottomCenter', "Represents the bottom panel alignment set to the center")); -const panelAlignmentJustifyIcon = registerIcon('panel-align-justify', Codicon.layoutPanelJustify, localize('panelBottomJustify', "Represents the bottom panel alignment set to justified")); const panelLeftIcon = registerIcon('panel-left', Codicon.layoutSidebarLeft, localize('panelLeft', "Represents a side bar in the left position")); const panelLeftOffIcon = registerIcon('panel-left-off', Codicon.layoutSidebarLeftOff, localize('panelLeftOff', "Represents a side bar in the left position toggled off")); const panelRightIcon = registerIcon('panel-right', Codicon.layoutSidebarRight, localize('panelRight', "Represents side bar in the right position")); const panelRightOffIcon = registerIcon('panel-right-off', Codicon.layoutSidebarRightOff, localize('panelRightOff', "Represents side bar in the right position toggled off")); const panelIcon = registerIcon('panel-bottom', Codicon.layoutPanel, localize('panelBottom', "Represents the bottom panel")); -const panelMaximizeIcon = registerIcon('panel-maximize', Codicon.screenFull, localize('maximizeIcon', 'Icon to maximize a panel.')); -const panelOnIcon = registerIcon('panel-layout-icon', Codicon.layoutPanel, localize('togglePanelOffIcon', 'Icon to toggle the panel off when it is on.')); -const panelOffIcon = registerIcon('panel-layout-icon-off', Codicon.layoutPanelOff, localize('togglePanelOnIcon', 'Icon to toggle the panel on when it is off.')); -const panelRestoreIcon = registerIcon('panel-restore', Codicon.screenNormal, localize('restoreIcon', 'Icon to restore a panel.')); +const statusBarIcon = registerIcon('statusBar', Codicon.layoutStatusbar, localize('statusBarIcon', "Represents the status bar")); + +const panelAlignmentLeftIcon = registerIcon('panel-align-left', Codicon.layoutPanelLeft, localize('panelBottomLeft', "Represents the bottom panel alignment set to the left")); +const panelAlignmentRightIcon = registerIcon('panel-align-right', Codicon.layoutPanelRight, localize('panelBottomRight', "Represents the bottom panel alignment set to the right")); +const panelAlignmentCenterIcon = registerIcon('panel-align-center', Codicon.layoutPanelCenter, localize('panelBottomCenter', "Represents the bottom panel alignment set to the center")); +const panelAlignmentJustifyIcon = registerIcon('panel-align-justify', Codicon.layoutPanelJustify, localize('panelBottomJustify', "Represents the bottom panel alignment set to justified")); + +const quickInputAlignmentTopIcon = registerIcon('quickInputAlignmentTop', Codicon.arrowUp, localize('quickInputAlignmentTop', "Represents quick input alignment set to the top")); +const quickInputAlignmentCenterIcon = registerIcon('quickInputAlignmentCenter', Codicon.circle, localize('quickInputAlignmentCenter', "Represents quick input alignment set to the center")); const fullscreenIcon = registerIcon('fullscreen', Codicon.screenFull, localize('fullScreenIcon', "Represents full screen")); const centerLayoutIcon = registerIcon('centerLayoutIcon', Codicon.layoutCentered, localize('centerLayoutIcon', "Represents centered layout mode")); const zenModeIcon = registerIcon('zenMode', Codicon.target, localize('zenModeIcon', "Represents zen mode")); -const auxiliaryBarMaximizeIcon = registerIcon('auxiliarybar-maximize', Codicon.screenFull, localize('maximizeAuxiliaryBarIcon', 'Icon to maximize the secondary side bar.')); -const auxiliaryBarRightIcon = registerIcon('auxiliarybar-right-layout-icon', Codicon.layoutSidebarRight, localize('toggleAuxiliaryIconRight', 'Icon to toggle the secondary side bar off in its right position.')); -const auxiliaryBarRightOffIcon = registerIcon('auxiliarybar-right-off-layout-icon', Codicon.layoutSidebarRightOff, localize('toggleAuxiliaryIconRightOn', 'Icon to toggle the secondary side bar on in its right position.')); -const auxiliaryBarLeftIcon = registerIcon('auxiliarybar-left-layout-icon', Codicon.layoutSidebarLeft, localize('toggleAuxiliaryIconLeft', 'Icon to toggle the secondary side bar in its left position.')); -const auxiliaryBarLeftOffIcon = registerIcon('auxiliarybar-left-off-layout-icon', Codicon.layoutSidebarLeftOff, localize('toggleAuxiliaryIconLeftOn', 'Icon to toggle the secondary side bar on in its left position.')); -const auxiliaryBarRestoreIcon = registerIcon('auxiliarybar-restore', Codicon.screenNormal, localize('auxiliaryBarRestoreIcon', 'Icon to restore the secondary side bar.')); - export const ToggleActivityBarVisibilityActionId = 'workbench.action.toggleActivityBarVisibility'; // --- Toggle Centered Layout -class ToggleCenteredLayoutAction extends Action2 { +registerAction2(class extends Action2 { constructor() { super({ @@ -103,7 +91,7 @@ class ToggleCenteredLayoutAction extends Action2 { layoutService.centerMainEditorLayout(!layoutService.isMainEditorLayoutCentered()); editorGroupService.activeGroup.focus(); } -} +}); // --- Set Sidebar Position const sidebarPositionConfigurationKey = 'workbench.sideBar.location'; @@ -144,6 +132,9 @@ class MoveSidebarLeftAction extends MoveSidebarPositionAction { } } +registerAction2(MoveSidebarRightAction); +registerAction2(MoveSidebarLeftAction); + // --- Toggle Sidebar Position export class ToggleSidebarPositionAction extends Action2 { @@ -175,11 +166,90 @@ export class ToggleSidebarPositionAction extends Action2 { } } +registerAction2(ToggleSidebarPositionAction); + const configureLayoutIcon = registerIcon('configure-layout-icon', Codicon.layout, localize('cofigureLayoutIcon', 'Icon represents workbench layout configuration.')); +MenuRegistry.appendMenuItem(MenuId.LayoutControlMenu, { + submenu: MenuId.LayoutControlMenuSubmenu, + title: localize('configureLayout', "Configure Layout"), + icon: configureLayoutIcon, + group: '1_workbench_layout', + when: ContextKeyExpr.and( + IsAuxiliaryWindowContext.negate(), + ContextKeyExpr.equals('config.workbench.layoutControl.type', 'menu') + ) +}); + + +MenuRegistry.appendMenuItems([{ + id: MenuId.ViewContainerTitleContext, + item: { + group: '3_workbench_layout_move', + command: { + id: ToggleSidebarPositionAction.ID, + title: localize('move side bar right', "Move Primary Side Bar Right") + }, + when: ContextKeyExpr.and(ContextKeyExpr.notEquals('config.workbench.sideBar.location', 'right'), ContextKeyExpr.equals('viewContainerLocation', ViewContainerLocationToString(ViewContainerLocation.Sidebar))), + order: 1 + } +}, { + id: MenuId.ViewContainerTitleContext, + item: { + group: '3_workbench_layout_move', + command: { + id: ToggleSidebarPositionAction.ID, + title: localize('move sidebar left', "Move Primary Side Bar Left") + }, + when: ContextKeyExpr.and(ContextKeyExpr.equals('config.workbench.sideBar.location', 'right'), ContextKeyExpr.equals('viewContainerLocation', ViewContainerLocationToString(ViewContainerLocation.Sidebar))), + order: 1 + } +}, { + id: MenuId.ViewContainerTitleContext, + item: { + group: '3_workbench_layout_move', + command: { + id: ToggleSidebarPositionAction.ID, + title: localize('move second sidebar left', "Move Secondary Side Bar Left") + }, + when: ContextKeyExpr.and(ContextKeyExpr.notEquals('config.workbench.sideBar.location', 'right'), ContextKeyExpr.equals('viewContainerLocation', ViewContainerLocationToString(ViewContainerLocation.AuxiliaryBar))), + order: 1 + } +}, { + id: MenuId.ViewContainerTitleContext, + item: { + group: '3_workbench_layout_move', + command: { + id: ToggleSidebarPositionAction.ID, + title: localize('move second sidebar right', "Move Secondary Side Bar Right") + }, + when: ContextKeyExpr.and(ContextKeyExpr.equals('config.workbench.sideBar.location', 'right'), ContextKeyExpr.equals('viewContainerLocation', ViewContainerLocationToString(ViewContainerLocation.AuxiliaryBar))), + order: 1 + } +}]); + +MenuRegistry.appendMenuItem(MenuId.MenubarAppearanceMenu, { + group: '3_workbench_layout_move', + command: { + id: ToggleSidebarPositionAction.ID, + title: localize({ key: 'miMoveSidebarRight', comment: ['&& denotes a mnemonic'] }, "&&Move Primary Side Bar Right") + }, + when: ContextKeyExpr.notEquals('config.workbench.sideBar.location', 'right'), + order: 2 +}); + +MenuRegistry.appendMenuItem(MenuId.MenubarAppearanceMenu, { + group: '3_workbench_layout_move', + command: { + id: ToggleSidebarPositionAction.ID, + title: localize({ key: 'miMoveSidebarLeft', comment: ['&& denotes a mnemonic'] }, "&&Move Primary Side Bar Left") + }, + when: ContextKeyExpr.equals('config.workbench.sideBar.location', 'right'), + order: 2 +}); // --- Toggle Editor Visibility -class ToggleEditorVisibilityAction extends Action2 { +registerAction2(class extends Action2 { constructor() { super({ @@ -199,7 +269,14 @@ class ToggleEditorVisibilityAction extends Action2 { run(accessor: ServicesAccessor): void { accessor.get(IWorkbenchLayoutService).toggleMaximizedPanel(); } -} +}); + +MenuRegistry.appendMenuItem(MenuId.MenubarViewMenu, { + group: '2_appearance', + title: localize({ key: 'miAppearance', comment: ['&& denotes a mnemonic'] }, "&&Appearance"), + submenu: MenuId.MenubarAppearanceMenu, + order: 1 +}); // Toggle Sidebar Visibility @@ -255,6 +332,61 @@ export class ToggleSidebarVisibilityAction extends Action2 { } } +registerAction2(ToggleSidebarVisibilityAction); + +MenuRegistry.appendMenuItems([ + { + id: MenuId.ViewContainerTitleContext, + item: { + group: '3_workbench_layout_move', + command: { + id: ToggleSidebarVisibilityAction.ID, + title: localize('compositePart.hideSideBarLabel', "Hide Primary Side Bar"), + }, + when: ContextKeyExpr.and(SideBarVisibleContext, ContextKeyExpr.equals('viewContainerLocation', ViewContainerLocationToString(ViewContainerLocation.Sidebar))), + order: 2 + } + }, { + id: MenuId.LayoutControlMenu, + item: { + group: '2_pane_toggles', + command: { + id: ToggleSidebarVisibilityAction.ID, + title: localize('toggleSideBar', "Toggle Primary Side Bar"), + icon: panelLeftOffIcon, + toggled: { condition: SideBarVisibleContext, icon: panelLeftIcon } + }, + when: ContextKeyExpr.and( + IsAuxiliaryWindowContext.negate(), + ContextKeyExpr.or( + ContextKeyExpr.equals('config.workbench.layoutControl.type', 'toggles'), + ContextKeyExpr.equals('config.workbench.layoutControl.type', 'both')), + ContextKeyExpr.equals('config.workbench.sideBar.location', 'left') + ), + order: 0 + } + }, { + id: MenuId.LayoutControlMenu, + item: { + group: '2_pane_toggles', + command: { + id: ToggleSidebarVisibilityAction.ID, + title: localize('toggleSideBar', "Toggle Primary Side Bar"), + icon: panelRightOffIcon, + toggled: { condition: SideBarVisibleContext, icon: panelRightIcon } + }, + when: ContextKeyExpr.and( + IsAuxiliaryWindowContext.negate(), + ContextKeyExpr.or( + ContextKeyExpr.equals('config.workbench.layoutControl.type', 'toggles'), + ContextKeyExpr.equals('config.workbench.layoutControl.type', 'both')), + ContextKeyExpr.equals('config.workbench.sideBar.location', 'right') + ), + order: 2 + } + } +]); + // --- Toggle Statusbar Visibility export class ToggleStatusbarVisibilityAction extends Action2 { @@ -292,6 +424,8 @@ export class ToggleStatusbarVisibilityAction extends Action2 { } } +registerAction2(ToggleStatusbarVisibilityAction); + // ------------------- Editor Tabs Layout -------------------------------- abstract class AbstractSetShowTabsAction extends Action2 { @@ -389,6 +523,31 @@ export class ZenShowSingleEditorTabAction extends AbstractSetShowTabsAction { } } +registerAction2(HideEditorTabsAction); +registerAction2(ZenHideEditorTabsAction); +registerAction2(ShowMultipleEditorTabsAction); +registerAction2(ZenShowMultipleEditorTabsAction); +registerAction2(ShowSingleEditorTabAction); +registerAction2(ZenShowSingleEditorTabAction); + +// --- Tab Bar Submenu in View Appearance Menu + +MenuRegistry.appendMenuItem(MenuId.MenubarAppearanceMenu, { + submenu: MenuId.EditorTabsBarShowTabsSubmenu, + title: localize('tabBar', "Tab Bar"), + group: '3_workbench_layout_move', + order: 10, + when: InEditorZenModeContext.negate() +}); + +MenuRegistry.appendMenuItem(MenuId.MenubarAppearanceMenu, { + submenu: MenuId.EditorTabsBarShowTabsZenModeSubmenu, + title: localize('tabBar', "Tab Bar"), + group: '3_workbench_layout_move', + order: 10, + when: InEditorZenModeContext +}); + // --- Show Editor Actions in Title Bar export class EditorActionsTitleBarAction extends Action2 { @@ -411,6 +570,7 @@ export class EditorActionsTitleBarAction extends Action2 { return configurationService.updateValue(LayoutSettings.EDITOR_ACTIONS_LOCATION, EditorActionsLocation.TITLEBAR); } } +registerAction2(EditorActionsTitleBarAction); // --- Editor Actions Default Position @@ -437,6 +597,7 @@ export class EditorActionsDefaultAction extends Action2 { return configurationService.updateValue(LayoutSettings.EDITOR_ACTIONS_LOCATION, EditorActionsLocation.DEFAULT); } } +registerAction2(EditorActionsDefaultAction); // --- Hide Editor Actions @@ -460,8 +621,9 @@ export class HideEditorActionsAction extends Action2 { return configurationService.updateValue(LayoutSettings.EDITOR_ACTIONS_LOCATION, EditorActionsLocation.HIDDEN); } } +registerAction2(HideEditorActionsAction); -// --- Show Editor Actions +// --- Hide Editor Actions export class ShowEditorActionsAction extends Action2 { @@ -483,6 +645,16 @@ export class ShowEditorActionsAction extends Action2 { return configurationService.updateValue(LayoutSettings.EDITOR_ACTIONS_LOCATION, EditorActionsLocation.DEFAULT); } } +registerAction2(ShowEditorActionsAction); + +// --- Editor Actions Position Submenu in View Appearance Menu + +MenuRegistry.appendMenuItem(MenuId.MenubarAppearanceMenu, { + submenu: MenuId.EditorActionsPositionSubmenu, + title: localize('editorActionsPosition', "Editor Actions Position"), + group: '3_workbench_layout_move', + order: 11 +}); // --- Configure Tabs Layout @@ -503,6 +675,7 @@ export class ConfigureEditorTabsAction extends Action2 { preferencesService.openSettings({ jsonEditor: false, query: 'workbench.editor tab' }); } } +registerAction2(ConfigureEditorTabsAction); // --- Configure Editor @@ -523,10 +696,11 @@ export class ConfigureEditorAction extends Action2 { preferencesService.openSettings({ jsonEditor: false, query: 'workbench.editor' }); } } +registerAction2(ConfigureEditorAction); // --- Toggle Pinned Tabs On Separate Row -class ToggleSeparatePinnedEditorTabsAction extends Action2 { +registerAction2(class extends Action2 { constructor() { super({ @@ -547,11 +721,11 @@ class ToggleSeparatePinnedEditorTabsAction extends Action2 { return configurationService.updateValue('workbench.editor.pinnedTabsOnSeparateRow', newSettingValue); } -} +}); // --- Toggle Zen Mode -class ToggleZenModeAction extends Action2 { +registerAction2(class extends Action2 { constructor() { super({ @@ -579,38 +753,68 @@ class ToggleZenModeAction extends Action2 { run(accessor: ServicesAccessor): void { return accessor.get(IWorkbenchLayoutService).toggleZenMode(); } -} +}); + +KeybindingsRegistry.registerCommandAndKeybindingRule({ + id: 'workbench.action.exitZenMode', + weight: KeybindingWeight.EditorContrib - 1000, + handler(accessor: ServicesAccessor) { + const layoutService = accessor.get(IWorkbenchLayoutService); + const contextKeyService = accessor.get(IContextKeyService); + if (InEditorZenModeContext.getValue(contextKeyService)) { + layoutService.toggleZenMode(); + } + }, + when: InEditorZenModeContext, + primary: KeyChord(KeyCode.Escape, KeyCode.Escape) +}); // --- Toggle Menu Bar -class ToggleMenubarAction extends Action2 { +if (isWindows || isLinux || isWeb) { + registerAction2(class ToggleMenubarAction extends Action2 { - constructor() { - super({ - id: 'workbench.action.toggleMenuBar', - title: { - ...localize2('toggleMenuBar', "Toggle Menu Bar"), - mnemonicTitle: localize({ key: 'miMenuBar', comment: ['&& denotes a mnemonic'] }, "Menu &&Bar"), + constructor() { + super({ + id: 'workbench.action.toggleMenuBar', + title: { + ...localize2('toggleMenuBar', "Toggle Menu Bar"), + mnemonicTitle: localize({ key: 'miMenuBar', comment: ['&& denotes a mnemonic'] }, "Menu &&Bar"), + }, + category: Categories.View, + f1: true, + toggled: ContextKeyExpr.and(IsMacNativeContext.toNegated(), ContextKeyExpr.notEquals(`config.${MenuSettings.MenuBarVisibility}`, 'hidden'), ContextKeyExpr.notEquals(`config.${MenuSettings.MenuBarVisibility}`, 'toggle'), ContextKeyExpr.notEquals(`config.${MenuSettings.MenuBarVisibility}`, 'compact')), + menu: [{ + id: MenuId.MenubarAppearanceMenu, + group: '2_workbench_layout', + order: 0 + }] + }); + } + + run(accessor: ServicesAccessor): void { + return accessor.get(IWorkbenchLayoutService).toggleMenuBar(); + } + }); + + // Add separately to title bar context menu so we can use a different title + for (const menuId of [MenuId.TitleBarContext, MenuId.TitleBarTitleContext]) { + MenuRegistry.appendMenuItem(menuId, { + command: { + id: 'workbench.action.toggleMenuBar', + title: localize('miMenuBarNoMnemonic', "Menu Bar"), + toggled: ContextKeyExpr.and(IsMacNativeContext.toNegated(), ContextKeyExpr.notEquals(`config.${MenuSettings.MenuBarVisibility}`, 'hidden'), ContextKeyExpr.notEquals(`config.${MenuSettings.MenuBarVisibility}`, 'toggle'), ContextKeyExpr.notEquals(`config.${MenuSettings.MenuBarVisibility}`, 'compact')) }, - category: Categories.View, - f1: true, - toggled: ContextKeyExpr.and(IsMacNativeContext.toNegated(), ContextKeyExpr.notEquals(`config.${MenuSettings.MenuBarVisibility}`, 'hidden'), ContextKeyExpr.notEquals(`config.${MenuSettings.MenuBarVisibility}`, 'toggle'), ContextKeyExpr.notEquals(`config.${MenuSettings.MenuBarVisibility}`, 'compact')), - menu: [{ - id: MenuId.MenubarAppearanceMenu, - group: '2_workbench_layout', - order: 0 - }] + when: ContextKeyExpr.and(IsAuxiliaryWindowFocusedContext.toNegated(), ContextKeyExpr.notEquals(TitleBarStyleContext.key, TitlebarStyle.NATIVE), IsMainWindowFullscreenContext.negate()), + group: '2_config', + order: 0 }); } - - run(accessor: ServicesAccessor): void { - return accessor.get(IWorkbenchLayoutService).toggleMenuBar(); - } } // --- Reset View Locations -class ResetViewLocationsAction extends Action2 { +registerAction2(class extends Action2 { constructor() { super({ @@ -624,11 +828,11 @@ class ResetViewLocationsAction extends Action2 { run(accessor: ServicesAccessor): void { return accessor.get(IViewDescriptorService).reset(); } -} +}); // --- Move View -class MoveViewAction extends Action2 { +registerAction2(class extends Action2 { constructor() { super({ @@ -770,7 +974,7 @@ class MoveViewAction extends Action2 { quickPick.show(); }); } -} +}); // --- Move Focused View @@ -929,9 +1133,11 @@ class MoveFocusedViewAction extends Action2 { } } +registerAction2(MoveFocusedViewAction); + // --- Reset Focused View Location -class ResetFocusedViewLocationAction extends Action2 { +registerAction2(class extends Action2 { constructor() { super({ @@ -969,7 +1175,7 @@ class ResetFocusedViewLocationAction extends Action2 { viewDescriptorService.moveViewsToContainer([viewDescriptor], defaultContainer, undefined, this.desc.id); viewsService.openView(viewDescriptor.id, true); } -} +}); // --- Resize View @@ -1103,9 +1309,17 @@ class DecreaseViewHeightAction extends BaseResizeViewAction { } } +registerAction2(IncreaseViewSizeAction); +registerAction2(IncreaseViewWidthAction); +registerAction2(IncreaseViewHeightAction); + +registerAction2(DecreaseViewSizeAction); +registerAction2(DecreaseViewWidthAction); +registerAction2(DecreaseViewHeightAction); + //#region Quick Input Alignment Actions -class AlignQuickInputTopAction extends Action2 { +registerAction2(class AlignQuickInputTopAction extends Action2 { constructor() { super({ @@ -1119,9 +1333,9 @@ class AlignQuickInputTopAction extends Action2 { const quickInputService = accessor.get(IQuickInputService); quickInputService.setAlignment('top'); } -} +}); -class AlignQuickInputCenterAction extends Action2 { +registerAction2(class AlignQuickInputCenterAction extends Action2 { constructor() { super({ @@ -1135,7 +1349,7 @@ class AlignQuickInputCenterAction extends Action2 { const quickInputService = accessor.get(IQuickInputService); quickInputService.setAlignment('center'); } -} +}); //#endregion @@ -1228,7 +1442,7 @@ for (const { active } of [...ToggleVisibilityActions, ...MoveSideBarActions, ... } } -class CustomizeLayoutAction extends Action2 { +registerAction2(class CustomizeLayoutAction extends Action2 { private _currentQuickPick?: IQuickPick; @@ -1421,631 +1635,4 @@ class CustomizeLayoutAction extends Action2 { quickPick.show(); } -} - -class MaximizeAuxiliaryBar extends Action2 { - - static readonly ID = 'workbench.action.maximizeAuxiliaryBar'; - - constructor() { - super({ - id: MaximizeAuxiliaryBar.ID, - title: localize2('maximizeAuxiliaryBar', 'Maximize Secondary Side Bar'), - tooltip: localize('maximizeAuxiliaryBarTooltip', "Maximize Secondary Side Bar Size"), - category: Categories.View, - f1: true, - precondition: AuxiliaryBarMaximizedContext.negate(), - icon: auxiliaryBarMaximizeIcon, - menu: { - id: MenuId.AuxiliaryBarTitle, - group: 'navigation', - order: 1, - when: AuxiliaryBarMaximizedContext.negate() - } - }); - } - - run(accessor: ServicesAccessor) { - const layoutService = accessor.get(IWorkbenchLayoutService); - - layoutService.setAuxiliaryBarMaximized(true); - } -} - -class RestoreAuxiliaryBar extends Action2 { - - static readonly ID = 'workbench.action.restoreAuxiliaryBar'; - - constructor() { - super({ - id: RestoreAuxiliaryBar.ID, - title: localize2('restoreAuxiliaryBar', 'Restore Secondary Side Bar'), - tooltip: localize('restoreAuxiliaryBarTooltip', "Restore Secondary Side Bar Size"), - category: Categories.View, - f1: true, - precondition: AuxiliaryBarMaximizedContext, - icon: auxiliaryBarRestoreIcon, - menu: { - id: MenuId.AuxiliaryBarTitle, - group: 'navigation', - order: 1, - when: AuxiliaryBarMaximizedContext - } - }); - } - - run(accessor: ServicesAccessor) { - const layoutService = accessor.get(IWorkbenchLayoutService); - - layoutService.setAuxiliaryBarMaximized(false); - } -} - -/** - * Registers all default workbench layout actions. - * This function should be called from workbench.ts to register actions specific to the default layout. - * The agent sessions workbench has its own set of layout actions. - */ -export function registerLayoutActions(): void { - // Toggle actions - registerAction2(ToggleCenteredLayoutAction); - registerAction2(MoveSidebarRightAction); - registerAction2(MoveSidebarLeftAction); - registerAction2(ToggleSidebarPositionAction); - registerAction2(ToggleEditorVisibilityAction); - registerAction2(ToggleSidebarVisibilityAction); - registerAction2(ToggleStatusbarVisibilityAction); - - // Editor Tabs Layout - registerAction2(HideEditorTabsAction); - registerAction2(ZenHideEditorTabsAction); - registerAction2(ShowMultipleEditorTabsAction); - registerAction2(ZenShowMultipleEditorTabsAction); - registerAction2(ShowSingleEditorTabAction); - registerAction2(ZenShowSingleEditorTabAction); - - // Editor Actions Position - registerAction2(EditorActionsTitleBarAction); - registerAction2(EditorActionsDefaultAction); - registerAction2(HideEditorActionsAction); - registerAction2(ShowEditorActionsAction); - - // Configure actions - registerAction2(ConfigureEditorTabsAction); - registerAction2(ConfigureEditorAction); - registerAction2(ToggleSeparatePinnedEditorTabsAction); - - // Zen Mode - registerAction2(ToggleZenModeAction); - KeybindingsRegistry.registerCommandAndKeybindingRule({ - id: 'workbench.action.exitZenMode', - weight: KeybindingWeight.EditorContrib - 1000, - handler(accessor: ServicesAccessor) { - const layoutService = accessor.get(IWorkbenchLayoutService); - const contextKeyService = accessor.get(IContextKeyService); - if (InEditorZenModeContext.getValue(contextKeyService)) { - layoutService.toggleZenMode(); - } - }, - when: InEditorZenModeContext, - primary: KeyChord(KeyCode.Escape, KeyCode.Escape) - }); - - // Toggle Menu Bar (platform specific) - if (isWindows || isLinux || isWeb) { - registerAction2(ToggleMenubarAction); - - // Add separately to title bar context menu so we can use a different title - for (const menuId of [MenuId.TitleBarContext, MenuId.TitleBarTitleContext]) { - MenuRegistry.appendMenuItem(menuId, { - command: { - id: 'workbench.action.toggleMenuBar', - title: localize('miMenuBarNoMnemonic', "Menu Bar"), - toggled: ContextKeyExpr.and(IsMacNativeContext.toNegated(), ContextKeyExpr.notEquals(`config.${MenuSettings.MenuBarVisibility}`, 'hidden'), ContextKeyExpr.notEquals(`config.${MenuSettings.MenuBarVisibility}`, 'toggle'), ContextKeyExpr.notEquals(`config.${MenuSettings.MenuBarVisibility}`, 'compact')) - }, - when: ContextKeyExpr.and(IsAuxiliaryWindowFocusedContext.toNegated(), ContextKeyExpr.notEquals(TitleBarStyleContext.key, TitlebarStyle.NATIVE), IsMainWindowFullscreenContext.negate()), - group: '2_config', - order: 0 - }); - } - } - - // View management - registerAction2(ResetViewLocationsAction); - registerAction2(MoveViewAction); - registerAction2(MoveFocusedViewAction); - registerAction2(ResetFocusedViewLocationAction); - - // Resize actions - registerAction2(IncreaseViewSizeAction); - registerAction2(IncreaseViewWidthAction); - registerAction2(IncreaseViewHeightAction); - registerAction2(DecreaseViewSizeAction); - registerAction2(DecreaseViewWidthAction); - registerAction2(DecreaseViewHeightAction); - - // Quick Input alignment - registerAction2(AlignQuickInputTopAction); - registerAction2(AlignQuickInputCenterAction); - - // Customize Layout - registerAction2(CustomizeLayoutAction); - - // Menu items - MenuRegistry.appendMenuItem(MenuId.LayoutControlMenu, { - submenu: MenuId.LayoutControlMenuSubmenu, - title: localize('configureLayout', "Configure Layout"), - icon: configureLayoutIcon, - group: '1_workbench_layout', - when: ContextKeyExpr.and( - IsAuxiliaryWindowContext.negate(), - ContextKeyExpr.equals('config.workbench.layoutControl.type', 'menu') - ) - }); - - MenuRegistry.appendMenuItems([{ - id: MenuId.ViewContainerTitleContext, - item: { - group: '3_workbench_layout_move', - command: { - id: ToggleSidebarPositionAction.ID, - title: localize('move side bar right', "Move Primary Side Bar Right") - }, - when: ContextKeyExpr.and(ContextKeyExpr.notEquals('config.workbench.sideBar.location', 'right'), ContextKeyExpr.equals('viewContainerLocation', ViewContainerLocationToString(ViewContainerLocation.Sidebar))), - order: 1 - } - }, { - id: MenuId.ViewContainerTitleContext, - item: { - group: '3_workbench_layout_move', - command: { - id: ToggleSidebarPositionAction.ID, - title: localize('move sidebar left', "Move Primary Side Bar Left") - }, - when: ContextKeyExpr.and(ContextKeyExpr.equals('config.workbench.sideBar.location', 'right'), ContextKeyExpr.equals('viewContainerLocation', ViewContainerLocationToString(ViewContainerLocation.Sidebar))), - order: 1 - } - }, { - id: MenuId.ViewContainerTitleContext, - item: { - group: '3_workbench_layout_move', - command: { - id: ToggleSidebarPositionAction.ID, - title: localize('move second sidebar left', "Move Secondary Side Bar Left") - }, - when: ContextKeyExpr.and(ContextKeyExpr.notEquals('config.workbench.sideBar.location', 'right'), ContextKeyExpr.equals('viewContainerLocation', ViewContainerLocationToString(ViewContainerLocation.AuxiliaryBar))), - order: 1 - } - }, { - id: MenuId.ViewContainerTitleContext, - item: { - group: '3_workbench_layout_move', - command: { - id: ToggleSidebarPositionAction.ID, - title: localize('move second sidebar right', "Move Secondary Side Bar Right") - }, - when: ContextKeyExpr.and(ContextKeyExpr.equals('config.workbench.sideBar.location', 'right'), ContextKeyExpr.equals('viewContainerLocation', ViewContainerLocationToString(ViewContainerLocation.AuxiliaryBar))), - order: 1 - } - }]); - - MenuRegistry.appendMenuItem(MenuId.MenubarAppearanceMenu, { - group: '3_workbench_layout_move', - command: { - id: ToggleSidebarPositionAction.ID, - title: localize({ key: 'miMoveSidebarRight', comment: ['&& denotes a mnemonic'] }, "&&Move Primary Side Bar Right") - }, - when: ContextKeyExpr.notEquals('config.workbench.sideBar.location', 'right'), - order: 2 - }); - - MenuRegistry.appendMenuItem(MenuId.MenubarAppearanceMenu, { - group: '3_workbench_layout_move', - command: { - id: ToggleSidebarPositionAction.ID, - title: localize({ key: 'miMoveSidebarLeft', comment: ['&& denotes a mnemonic'] }, "&&Move Primary Side Bar Left") - }, - when: ContextKeyExpr.equals('config.workbench.sideBar.location', 'right'), - order: 2 - }); - - MenuRegistry.appendMenuItem(MenuId.MenubarViewMenu, { - group: '2_appearance', - title: localize({ key: 'miAppearance', comment: ['&& denotes a mnemonic'] }, "&&Appearance"), - submenu: MenuId.MenubarAppearanceMenu, - order: 1 - }); - - MenuRegistry.appendMenuItems([ - { - id: MenuId.ViewContainerTitleContext, - item: { - group: '3_workbench_layout_move', - command: { - id: ToggleSidebarVisibilityAction.ID, - title: localize('compositePart.hideSideBarLabel', "Hide Primary Side Bar"), - }, - when: ContextKeyExpr.and(SideBarVisibleContext, ContextKeyExpr.equals('viewContainerLocation', ViewContainerLocationToString(ViewContainerLocation.Sidebar))), - order: 2 - } - }, { - id: MenuId.LayoutControlMenu, - item: { - group: '2_pane_toggles', - command: { - id: ToggleSidebarVisibilityAction.ID, - title: localize('toggleSideBar', "Toggle Primary Side Bar"), - icon: panelLeftOffIcon, - toggled: { condition: SideBarVisibleContext, icon: panelLeftIcon } - }, - when: ContextKeyExpr.and( - IsAuxiliaryWindowContext.negate(), - ContextKeyExpr.or( - ContextKeyExpr.equals('config.workbench.layoutControl.type', 'toggles'), - ContextKeyExpr.equals('config.workbench.layoutControl.type', 'both')), - ContextKeyExpr.equals('config.workbench.sideBar.location', 'left') - ), - order: 0 - } - }, { - id: MenuId.LayoutControlMenu, - item: { - group: '2_pane_toggles', - command: { - id: ToggleSidebarVisibilityAction.ID, - title: localize('toggleSideBar', "Toggle Primary Side Bar"), - icon: panelRightOffIcon, - toggled: { condition: SideBarVisibleContext, icon: panelRightIcon } - }, - when: ContextKeyExpr.and( - IsAuxiliaryWindowContext.negate(), - ContextKeyExpr.or( - ContextKeyExpr.equals('config.workbench.layoutControl.type', 'toggles'), - ContextKeyExpr.equals('config.workbench.layoutControl.type', 'both')), - ContextKeyExpr.equals('config.workbench.sideBar.location', 'right') - ), - order: 2 - } - } - ]); - - // Tab Bar Submenu - MenuRegistry.appendMenuItem(MenuId.MenubarAppearanceMenu, { - submenu: MenuId.EditorTabsBarShowTabsSubmenu, - title: localize('tabBar', "Tab Bar"), - group: '3_workbench_layout_move', - order: 10, - when: InEditorZenModeContext.negate() - }); - - MenuRegistry.appendMenuItem(MenuId.MenubarAppearanceMenu, { - submenu: MenuId.EditorTabsBarShowTabsZenModeSubmenu, - title: localize('tabBar', "Tab Bar"), - group: '3_workbench_layout_move', - order: 10, - when: InEditorZenModeContext - }); - - // Editor Actions Position Submenu - MenuRegistry.appendMenuItem(MenuId.MenubarAppearanceMenu, { - submenu: MenuId.EditorActionsPositionSubmenu, - title: localize('editorActionsPosition', "Editor Actions Position"), - group: '3_workbench_layout_move', - order: 11 - }); - - MenuRegistry.appendMenuItems([ - { - id: MenuId.LayoutControlMenu, - item: { - group: '2_pane_toggles', - command: { - id: TogglePanelAction.ID, - title: localize('togglePanel', "Toggle Panel"), - icon: panelOffIcon, - toggled: { condition: PanelVisibleContext, icon: panelOnIcon } - }, - when: - ContextKeyExpr.and( - IsAuxiliaryWindowContext.negate(), - ContextKeyExpr.or( - ContextKeyExpr.equals('config.workbench.layoutControl.type', 'toggles'), - ContextKeyExpr.equals('config.workbench.layoutControl.type', 'both') - ) - ), - order: 1 - } - } - ]); - - MenuRegistry.appendMenuItems([ - { - id: MenuId.LayoutControlMenu, - item: { - group: '2_pane_toggles', - command: { - id: ToggleAuxiliaryBarAction.ID, - title: localize('toggleSecondarySideBar', "Toggle Secondary Side Bar"), - toggled: { condition: AuxiliaryBarVisibleContext, icon: auxiliaryBarLeftIcon }, - icon: auxiliaryBarLeftOffIcon, - }, - when: ContextKeyExpr.and( - IsAuxiliaryWindowContext.negate(), - ContextKeyExpr.or( - ContextKeyExpr.equals('config.workbench.layoutControl.type', 'toggles'), - ContextKeyExpr.equals('config.workbench.layoutControl.type', 'both')), - ContextKeyExpr.equals('config.workbench.sideBar.location', 'right') - ), - order: 0 - } - }, { - id: MenuId.LayoutControlMenu, - item: { - group: '2_pane_toggles', - command: { - id: ToggleAuxiliaryBarAction.ID, - title: localize('toggleSecondarySideBar', "Toggle Secondary Side Bar"), - toggled: { condition: AuxiliaryBarVisibleContext, icon: auxiliaryBarRightIcon }, - icon: auxiliaryBarRightOffIcon, - }, - when: ContextKeyExpr.and( - IsAuxiliaryWindowContext.negate(), - ContextKeyExpr.or( - ContextKeyExpr.equals('config.workbench.layoutControl.type', 'toggles'), - ContextKeyExpr.equals('config.workbench.layoutControl.type', 'both')), - ContextKeyExpr.equals('config.workbench.sideBar.location', 'left') - ), - order: 2 - } - } - ]); - - const panelMaximizationSupportedWhen = ContextKeyExpr.or(PanelAlignmentContext.isEqualTo('center'), ContextKeyExpr.and(PanelPositionContext.notEqualsTo('bottom'), PanelPositionContext.notEqualsTo('top'))); - const ToggleMaximizedPanelActionId = 'workbench.action.toggleMaximizedPanel'; - - registerAction2(class extends Action2 { - constructor() { - super({ - id: ToggleMaximizedPanelActionId, - title: localize2('toggleMaximizedPanel', 'Toggle Maximized Panel'), - tooltip: localize('maximizePanel', "Maximize Panel Size"), - category: Categories.View, - f1: true, - icon: panelMaximizeIcon, - precondition: panelMaximizationSupportedWhen, // the workbench grid currently prevents us from supporting panel maximization with non-center panel alignment - }); - } - run(accessor: ServicesAccessor) { - const layoutService = accessor.get(IWorkbenchLayoutService); - const notificationService = accessor.get(INotificationService); - if (layoutService.getPanelAlignment() !== 'center' && isHorizontal(layoutService.getPanelPosition())) { - notificationService.warn(localize('panelMaxNotSupported', "Maximizing the panel is only supported when it is center aligned.")); - return; - } - - if (!layoutService.isVisible(Parts.PANEL_PART)) { - layoutService.setPartHidden(false, Parts.PANEL_PART); - // If the panel is not already maximized, maximize it - if (!layoutService.isPanelMaximized()) { - layoutService.toggleMaximizedPanel(); - } - } - else { - layoutService.toggleMaximizedPanel(); - } - } - }); - - MenuRegistry.appendMenuItem(MenuId.PanelTitle, { - command: { - id: TogglePanelAction.ID, - title: localize('closePanel', 'Hide Panel'), - icon: closeIcon - }, - group: 'navigation', - order: 2 - }); - - MenuRegistry.appendMenuItem(MenuId.PanelTitle, { - command: { - id: ToggleMaximizedPanelActionId, - title: localize('maximizePanel', "Maximize Panel Size"), - icon: panelMaximizeIcon - }, - group: 'navigation', - order: 1, - when: ContextKeyExpr.and(panelMaximizationSupportedWhen, PanelMaximizedContext.negate()) - }); - - MenuRegistry.appendMenuItem(MenuId.PanelTitle, { - command: { - id: ToggleMaximizedPanelActionId, - title: localize('minimizePanel', "Restore Panel Size"), - icon: panelRestoreIcon - }, - group: 'navigation', - order: 1, - when: ContextKeyExpr.and(panelMaximizationSupportedWhen, PanelMaximizedContext) - }); - - registerAction2(MaximizeAuxiliaryBar); - registerAction2(RestoreAuxiliaryBar); - - MenuRegistry.appendMenuItem(MenuId.AuxiliaryBarTitle, { - command: { - id: ToggleAuxiliaryBarAction.ID, - title: localize('closeSecondarySideBar', 'Hide Secondary Side Bar'), - icon: closeIcon - }, - group: 'navigation', - order: 2, - when: ContextKeyExpr.equals(`config.${LayoutSettings.ACTIVITY_BAR_LOCATION}`, ActivityBarPosition.DEFAULT) - }); - - registerActivityBarActions(); - -} - -function registerActivityBarActions() { - registerAction2(class extends Action2 { - constructor() { - super({ - id: 'workbench.action.activityBarLocation.default', - title: { - ...localize2('positionActivityBarDefault', 'Move Activity Bar to Side'), - mnemonicTitle: localize({ key: 'miDefaultActivityBar', comment: ['&& denotes a mnemonic'] }, "&&Default"), - }, - shortTitle: localize('default', "Default"), - category: Categories.View, - toggled: ContextKeyExpr.equals(`config.${LayoutSettings.ACTIVITY_BAR_LOCATION}`, ActivityBarPosition.DEFAULT), - menu: [{ - id: MenuId.ActivityBarPositionMenu, - order: 1 - }, { - id: MenuId.CommandPalette, - when: ContextKeyExpr.notEquals(`config.${LayoutSettings.ACTIVITY_BAR_LOCATION}`, ActivityBarPosition.DEFAULT), - }] - }); - } - run(accessor: ServicesAccessor): void { - const configurationService = accessor.get(IConfigurationService); - configurationService.updateValue(LayoutSettings.ACTIVITY_BAR_LOCATION, ActivityBarPosition.DEFAULT); - } - }); - - registerAction2(class extends Action2 { - constructor() { - super({ - id: 'workbench.action.activityBarLocation.top', - title: { - ...localize2('positionActivityBarTop', 'Move Activity Bar to Top'), - mnemonicTitle: localize({ key: 'miTopActivityBar', comment: ['&& denotes a mnemonic'] }, "&&Top"), - }, - shortTitle: localize('top', "Top"), - category: Categories.View, - toggled: ContextKeyExpr.equals(`config.${LayoutSettings.ACTIVITY_BAR_LOCATION}`, ActivityBarPosition.TOP), - menu: [{ - id: MenuId.ActivityBarPositionMenu, - order: 2 - }, { - id: MenuId.CommandPalette, - when: ContextKeyExpr.notEquals(`config.${LayoutSettings.ACTIVITY_BAR_LOCATION}`, ActivityBarPosition.TOP), - }] - }); - } - run(accessor: ServicesAccessor): void { - const configurationService = accessor.get(IConfigurationService); - configurationService.updateValue(LayoutSettings.ACTIVITY_BAR_LOCATION, ActivityBarPosition.TOP); - } - }); - - registerAction2(class extends Action2 { - constructor() { - super({ - id: 'workbench.action.activityBarLocation.bottom', - title: { - ...localize2('positionActivityBarBottom', 'Move Activity Bar to Bottom'), - mnemonicTitle: localize({ key: 'miBottomActivityBar', comment: ['&& denotes a mnemonic'] }, "&&Bottom"), - }, - shortTitle: localize('bottom', "Bottom"), - category: Categories.View, - toggled: ContextKeyExpr.equals(`config.${LayoutSettings.ACTIVITY_BAR_LOCATION}`, ActivityBarPosition.BOTTOM), - menu: [{ - id: MenuId.ActivityBarPositionMenu, - order: 3 - }, { - id: MenuId.CommandPalette, - when: ContextKeyExpr.notEquals(`config.${LayoutSettings.ACTIVITY_BAR_LOCATION}`, ActivityBarPosition.BOTTOM), - }] - }); - } - run(accessor: ServicesAccessor): void { - const configurationService = accessor.get(IConfigurationService); - configurationService.updateValue(LayoutSettings.ACTIVITY_BAR_LOCATION, ActivityBarPosition.BOTTOM); - } - }); - - registerAction2(class extends Action2 { - constructor() { - super({ - id: 'workbench.action.activityBarLocation.hide', - title: { - ...localize2('hideActivityBar', 'Hide Activity Bar'), - mnemonicTitle: localize({ key: 'miHideActivityBar', comment: ['&& denotes a mnemonic'] }, "&&Hidden"), - }, - shortTitle: localize('hide', "Hidden"), - category: Categories.View, - toggled: ContextKeyExpr.equals(`config.${LayoutSettings.ACTIVITY_BAR_LOCATION}`, ActivityBarPosition.HIDDEN), - menu: [{ - id: MenuId.ActivityBarPositionMenu, - order: 4 - }, { - id: MenuId.CommandPalette, - when: ContextKeyExpr.notEquals(`config.${LayoutSettings.ACTIVITY_BAR_LOCATION}`, ActivityBarPosition.HIDDEN), - }] - }); - } - run(accessor: ServicesAccessor): void { - const configurationService = accessor.get(IConfigurationService); - configurationService.updateValue(LayoutSettings.ACTIVITY_BAR_LOCATION, ActivityBarPosition.HIDDEN); - } - }); - - MenuRegistry.appendMenuItem(MenuId.MenubarAppearanceMenu, { - submenu: MenuId.ActivityBarPositionMenu, - title: localize('positionActivituBar', "Activity Bar Position"), - group: '3_workbench_layout_move', - order: 2 - }); - - MenuRegistry.appendMenuItem(MenuId.ViewContainerTitleContext, { - submenu: MenuId.ActivityBarPositionMenu, - title: localize('positionActivituBar', "Activity Bar Position"), - when: ContextKeyExpr.or( - ContextKeyExpr.equals('viewContainerLocation', ViewContainerLocationToString(ViewContainerLocation.Sidebar)), - ContextKeyExpr.equals('viewContainerLocation', ViewContainerLocationToString(ViewContainerLocation.AuxiliaryBar)) - ), - group: '3_workbench_layout_move', - order: 1 - }); - - registerAction2(class extends SwitchCompositeViewAction { - constructor() { - super({ - id: 'workbench.action.previousSideBarView', - title: localize2('previousSideBarView', 'Previous Primary Side Bar View'), - category: Categories.View, - f1: true - }, ViewContainerLocation.Sidebar, -1); - } - }); - - registerAction2(class extends SwitchCompositeViewAction { - constructor() { - super({ - id: 'workbench.action.nextSideBarView', - title: localize2('nextSideBarView', 'Next Primary Side Bar View'), - category: Categories.View, - f1: true - }, ViewContainerLocation.Sidebar, 1); - } - }); - - registerAction2( - class FocusActivityBarAction extends Action2 { - constructor() { - super({ - id: 'workbench.action.focusActivityBar', - title: localize2('focusActivityBar', 'Focus Activity Bar'), - category: Categories.View, - f1: true - }); - } - - async run(accessor: ServicesAccessor): Promise { - const layoutService = accessor.get(IWorkbenchLayoutService); - layoutService.focusPart(Parts.ACTIVITYBAR_PART); - } - }); - -} +}); diff --git a/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts b/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts index 1d21d523c08..6978ffacbf0 100644 --- a/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts +++ b/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts @@ -5,11 +5,11 @@ import './media/activitybarpart.css'; import './media/activityaction.css'; -import { localize } from '../../../../nls.js'; +import { localize, localize2 } from '../../../../nls.js'; import { ActionsOrientation } from '../../../../base/browser/ui/actionbar/actionbar.js'; import { Part } from '../../part.js'; -import { IWorkbenchLayoutService, Parts, Position } from '../../../services/layout/browser/layoutService.js'; -import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { ActivityBarPosition, IWorkbenchLayoutService, LayoutSettings, Parts, Position } from '../../../services/layout/browser/layoutService.js'; +import { IInstantiationService, ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; import { DisposableStore, MutableDisposable } from '../../../../base/common/lifecycle.js'; import { ToggleSidebarPositionAction, ToggleSidebarVisibilityAction } from '../../actions/layoutActions.js'; import { IThemeService, IColorTheme, registerThemingParticipant } from '../../../../platform/theme/common/themeService.js'; @@ -29,13 +29,15 @@ import { IPaneCompositePart } from '../paneCompositePart.js'; import { IPaneCompositeBarOptions, PaneCompositeBar } from '../paneCompositeBar.js'; import { GlobalCompositeBar } from '../globalCompositeBar.js'; import { IStorageService } from '../../../../platform/storage/common/storage.js'; -import { IMenuService, MenuId } from '../../../../platform/actions/common/actions.js'; -import { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { Action2, IMenuService, MenuId, MenuRegistry, registerAction2 } from '../../../../platform/actions/common/actions.js'; +import { ContextKeyExpr, IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { Categories } from '../../../../platform/action/common/actionCommonCategories.js'; import { getContextMenuActions } from '../../../../platform/actions/browser/menuEntryActionViewItem.js'; -import { IViewDescriptorService } from '../../../common/views.js'; +import { IViewDescriptorService, ViewContainerLocation, ViewContainerLocationToString } from '../../../common/views.js'; import { IExtensionService } from '../../../services/extensions/common/extensions.js'; import { IWorkbenchEnvironmentService } from '../../../services/environment/common/environmentService.js'; import { IViewsService } from '../../../services/views/common/viewsService.js'; +import { SwitchCompositeViewAction } from '../compositeBarActions.js'; export class ActivitybarPart extends Part { @@ -75,7 +77,7 @@ export class ActivitybarPart extends Part { viewContainersWorkspaceStateKey: ActivitybarPart.viewContainersWorkspaceStateKey, orientation: ActionsOrientation.VERTICAL, icon: true, - iconSize: 16, + iconSize: 24, activityHoverOptions: { position: () => this.layoutService.getSideBarPosition() === Position.LEFT ? HoverPosition.RIGHT : HoverPosition.LEFT, }, @@ -381,6 +383,167 @@ export class ActivityBarCompositeBar extends PaneCompositeBar { } +registerAction2(class extends Action2 { + constructor() { + super({ + id: 'workbench.action.activityBarLocation.default', + title: { + ...localize2('positionActivityBarDefault', 'Move Activity Bar to Side'), + mnemonicTitle: localize({ key: 'miDefaultActivityBar', comment: ['&& denotes a mnemonic'] }, "&&Default"), + }, + shortTitle: localize('default', "Default"), + category: Categories.View, + toggled: ContextKeyExpr.equals(`config.${LayoutSettings.ACTIVITY_BAR_LOCATION}`, ActivityBarPosition.DEFAULT), + menu: [{ + id: MenuId.ActivityBarPositionMenu, + order: 1 + }, { + id: MenuId.CommandPalette, + when: ContextKeyExpr.notEquals(`config.${LayoutSettings.ACTIVITY_BAR_LOCATION}`, ActivityBarPosition.DEFAULT), + }] + }); + } + run(accessor: ServicesAccessor): void { + const configurationService = accessor.get(IConfigurationService); + configurationService.updateValue(LayoutSettings.ACTIVITY_BAR_LOCATION, ActivityBarPosition.DEFAULT); + } +}); + +registerAction2(class extends Action2 { + constructor() { + super({ + id: 'workbench.action.activityBarLocation.top', + title: { + ...localize2('positionActivityBarTop', 'Move Activity Bar to Top'), + mnemonicTitle: localize({ key: 'miTopActivityBar', comment: ['&& denotes a mnemonic'] }, "&&Top"), + }, + shortTitle: localize('top', "Top"), + category: Categories.View, + toggled: ContextKeyExpr.equals(`config.${LayoutSettings.ACTIVITY_BAR_LOCATION}`, ActivityBarPosition.TOP), + menu: [{ + id: MenuId.ActivityBarPositionMenu, + order: 2 + }, { + id: MenuId.CommandPalette, + when: ContextKeyExpr.notEquals(`config.${LayoutSettings.ACTIVITY_BAR_LOCATION}`, ActivityBarPosition.TOP), + }] + }); + } + run(accessor: ServicesAccessor): void { + const configurationService = accessor.get(IConfigurationService); + configurationService.updateValue(LayoutSettings.ACTIVITY_BAR_LOCATION, ActivityBarPosition.TOP); + } +}); + +registerAction2(class extends Action2 { + constructor() { + super({ + id: 'workbench.action.activityBarLocation.bottom', + title: { + ...localize2('positionActivityBarBottom', 'Move Activity Bar to Bottom'), + mnemonicTitle: localize({ key: 'miBottomActivityBar', comment: ['&& denotes a mnemonic'] }, "&&Bottom"), + }, + shortTitle: localize('bottom', "Bottom"), + category: Categories.View, + toggled: ContextKeyExpr.equals(`config.${LayoutSettings.ACTIVITY_BAR_LOCATION}`, ActivityBarPosition.BOTTOM), + menu: [{ + id: MenuId.ActivityBarPositionMenu, + order: 3 + }, { + id: MenuId.CommandPalette, + when: ContextKeyExpr.notEquals(`config.${LayoutSettings.ACTIVITY_BAR_LOCATION}`, ActivityBarPosition.BOTTOM), + }] + }); + } + run(accessor: ServicesAccessor): void { + const configurationService = accessor.get(IConfigurationService); + configurationService.updateValue(LayoutSettings.ACTIVITY_BAR_LOCATION, ActivityBarPosition.BOTTOM); + } +}); + +registerAction2(class extends Action2 { + constructor() { + super({ + id: 'workbench.action.activityBarLocation.hide', + title: { + ...localize2('hideActivityBar', 'Hide Activity Bar'), + mnemonicTitle: localize({ key: 'miHideActivityBar', comment: ['&& denotes a mnemonic'] }, "&&Hidden"), + }, + shortTitle: localize('hide', "Hidden"), + category: Categories.View, + toggled: ContextKeyExpr.equals(`config.${LayoutSettings.ACTIVITY_BAR_LOCATION}`, ActivityBarPosition.HIDDEN), + menu: [{ + id: MenuId.ActivityBarPositionMenu, + order: 4 + }, { + id: MenuId.CommandPalette, + when: ContextKeyExpr.notEquals(`config.${LayoutSettings.ACTIVITY_BAR_LOCATION}`, ActivityBarPosition.HIDDEN), + }] + }); + } + run(accessor: ServicesAccessor): void { + const configurationService = accessor.get(IConfigurationService); + configurationService.updateValue(LayoutSettings.ACTIVITY_BAR_LOCATION, ActivityBarPosition.HIDDEN); + } +}); + +MenuRegistry.appendMenuItem(MenuId.MenubarAppearanceMenu, { + submenu: MenuId.ActivityBarPositionMenu, + title: localize('positionActivituBar', "Activity Bar Position"), + group: '3_workbench_layout_move', + order: 2 +}); + +MenuRegistry.appendMenuItem(MenuId.ViewContainerTitleContext, { + submenu: MenuId.ActivityBarPositionMenu, + title: localize('positionActivituBar', "Activity Bar Position"), + when: ContextKeyExpr.or( + ContextKeyExpr.equals('viewContainerLocation', ViewContainerLocationToString(ViewContainerLocation.Sidebar)), + ContextKeyExpr.equals('viewContainerLocation', ViewContainerLocationToString(ViewContainerLocation.AuxiliaryBar)) + ), + group: '3_workbench_layout_move', + order: 1 +}); + +registerAction2(class extends SwitchCompositeViewAction { + constructor() { + super({ + id: 'workbench.action.previousSideBarView', + title: localize2('previousSideBarView', 'Previous Primary Side Bar View'), + category: Categories.View, + f1: true + }, ViewContainerLocation.Sidebar, -1); + } +}); + +registerAction2(class extends SwitchCompositeViewAction { + constructor() { + super({ + id: 'workbench.action.nextSideBarView', + title: localize2('nextSideBarView', 'Next Primary Side Bar View'), + category: Categories.View, + f1: true + }, ViewContainerLocation.Sidebar, 1); + } +}); + +registerAction2( + class FocusActivityBarAction extends Action2 { + constructor() { + super({ + id: 'workbench.action.focusActivityBar', + title: localize2('focusActivityBar', 'Focus Activity Bar'), + category: Categories.View, + f1: true + }); + } + + async run(accessor: ServicesAccessor): Promise { + const layoutService = accessor.get(IWorkbenchLayoutService); + layoutService.focusPart(Parts.ACTIVITYBAR_PART); + } + }); + registerThemingParticipant((theme, collector) => { const activityBarActiveBorderColor = theme.getColor(ACTIVITY_BAR_ACTIVE_BORDER); diff --git a/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarActions.ts b/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarActions.ts index 3af96daa23e..5abfb88dd9c 100644 --- a/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarActions.ts +++ b/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarActions.ts @@ -10,17 +10,24 @@ import { ContextKeyExpr } from '../../../../platform/contextkey/common/contextke import { registerIcon } from '../../../../platform/theme/common/iconRegistry.js'; import { Categories } from '../../../../platform/action/common/actionCommonCategories.js'; import { alert } from '../../../../base/browser/ui/aria/aria.js'; -import { AuxiliaryBarVisibleContext } from '../../../common/contextkeys.js'; +import { AuxiliaryBarMaximizedContext, AuxiliaryBarVisibleContext, IsAuxiliaryWindowContext } from '../../../common/contextkeys.js'; import { ViewContainerLocation, ViewContainerLocationToString } from '../../../common/views.js'; -import { IWorkbenchLayoutService, Parts } from '../../../services/layout/browser/layoutService.js'; +import { ActivityBarPosition, IWorkbenchLayoutService, LayoutSettings, Parts } from '../../../services/layout/browser/layoutService.js'; import { IPaneCompositePartService } from '../../../services/panecomposite/browser/panecomposite.js'; import { ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; import { SwitchCompositeViewAction } from '../compositeBarActions.js'; +const maximizeIcon = registerIcon('auxiliarybar-maximize', Codicon.screenFull, localize('maximizeIcon', 'Icon to maximize the secondary side bar.')); +const restoreIcon = registerIcon('auxiliarybar-restore', Codicon.screenNormal, localize('restoreIcon', 'Icon to restore the secondary side bar.')); const closeIcon = registerIcon('auxiliarybar-close', Codicon.close, localize('closeIcon', 'Icon to close the secondary side bar.')); +const auxiliaryBarRightIcon = registerIcon('auxiliarybar-right-layout-icon', Codicon.layoutSidebarRight, localize('toggleAuxiliaryIconRight', 'Icon to toggle the secondary side bar off in its right position.')); +const auxiliaryBarRightOffIcon = registerIcon('auxiliarybar-right-off-layout-icon', Codicon.layoutSidebarRightOff, localize('toggleAuxiliaryIconRightOn', 'Icon to toggle the secondary side bar on in its right position.')); +const auxiliaryBarLeftIcon = registerIcon('auxiliarybar-left-layout-icon', Codicon.layoutSidebarLeft, localize('toggleAuxiliaryIconLeft', 'Icon to toggle the secondary side bar in its left position.')); +const auxiliaryBarLeftOffIcon = registerIcon('auxiliarybar-left-off-layout-icon', Codicon.layoutSidebarLeftOff, localize('toggleAuxiliaryIconLeftOn', 'Icon to toggle the secondary side bar on in its left position.')); + export class ToggleAuxiliaryBarAction extends Action2 { static readonly ID = 'workbench.action.toggleAuxiliaryBar'; @@ -77,6 +84,17 @@ export class ToggleAuxiliaryBarAction extends Action2 { registerAction2(ToggleAuxiliaryBarAction); +MenuRegistry.appendMenuItem(MenuId.AuxiliaryBarTitle, { + command: { + id: ToggleAuxiliaryBarAction.ID, + title: localize('closeSecondarySideBar', 'Hide Secondary Side Bar'), + icon: closeIcon + }, + group: 'navigation', + order: 2, + when: ContextKeyExpr.equals(`config.${LayoutSettings.ACTIVITY_BAR_LOCATION}`, ActivityBarPosition.DEFAULT) +}); + registerAction2(class extends Action2 { constructor() { super({ @@ -123,6 +141,44 @@ registerAction2(class FocusAuxiliaryBarAction extends Action2 { MenuRegistry.appendMenuItems([ { + id: MenuId.LayoutControlMenu, + item: { + group: '2_pane_toggles', + command: { + id: ToggleAuxiliaryBarAction.ID, + title: localize('toggleSecondarySideBar', "Toggle Secondary Side Bar"), + toggled: { condition: AuxiliaryBarVisibleContext, icon: auxiliaryBarLeftIcon }, + icon: auxiliaryBarLeftOffIcon, + }, + when: ContextKeyExpr.and( + IsAuxiliaryWindowContext.negate(), + ContextKeyExpr.or( + ContextKeyExpr.equals('config.workbench.layoutControl.type', 'toggles'), + ContextKeyExpr.equals('config.workbench.layoutControl.type', 'both')), + ContextKeyExpr.equals('config.workbench.sideBar.location', 'right') + ), + order: 0 + } + }, { + id: MenuId.LayoutControlMenu, + item: { + group: '2_pane_toggles', + command: { + id: ToggleAuxiliaryBarAction.ID, + title: localize('toggleSecondarySideBar', "Toggle Secondary Side Bar"), + toggled: { condition: AuxiliaryBarVisibleContext, icon: auxiliaryBarRightIcon }, + icon: auxiliaryBarRightOffIcon, + }, + when: ContextKeyExpr.and( + IsAuxiliaryWindowContext.negate(), + ContextKeyExpr.or( + ContextKeyExpr.equals('config.workbench.layoutControl.type', 'toggles'), + ContextKeyExpr.equals('config.workbench.layoutControl.type', 'both')), + ContextKeyExpr.equals('config.workbench.sideBar.location', 'left') + ), + order: 2 + } + }, { id: MenuId.ViewContainerTitleContext, item: { group: '3_workbench_layout_move', @@ -158,6 +214,67 @@ registerAction2(class extends SwitchCompositeViewAction { } }); +// --- Maximized Mode + +class MaximizeAuxiliaryBar extends Action2 { + + static readonly ID = 'workbench.action.maximizeAuxiliaryBar'; + + constructor() { + super({ + id: MaximizeAuxiliaryBar.ID, + title: localize2('maximizeAuxiliaryBar', 'Maximize Secondary Side Bar'), + tooltip: localize('maximizeAuxiliaryBarTooltip', "Maximize Secondary Side Bar Size"), + category: Categories.View, + f1: true, + precondition: AuxiliaryBarMaximizedContext.negate(), + icon: maximizeIcon, + menu: { + id: MenuId.AuxiliaryBarTitle, + group: 'navigation', + order: 1, + when: AuxiliaryBarMaximizedContext.negate() + } + }); + } + + run(accessor: ServicesAccessor) { + const layoutService = accessor.get(IWorkbenchLayoutService); + + layoutService.setAuxiliaryBarMaximized(true); + } +} +registerAction2(MaximizeAuxiliaryBar); + +class RestoreAuxiliaryBar extends Action2 { + + static readonly ID = 'workbench.action.restoreAuxiliaryBar'; + + constructor() { + super({ + id: RestoreAuxiliaryBar.ID, + title: localize2('restoreAuxiliaryBar', 'Restore Secondary Side Bar'), + tooltip: localize('restoreAuxiliaryBarTooltip', "Restore Secondary Side Bar Size"), + category: Categories.View, + f1: true, + precondition: AuxiliaryBarMaximizedContext, + icon: restoreIcon, + menu: { + id: MenuId.AuxiliaryBarTitle, + group: 'navigation', + order: 1, + when: AuxiliaryBarMaximizedContext + } + }); + } + + run(accessor: ServicesAccessor) { + const layoutService = accessor.get(IWorkbenchLayoutService); + + layoutService.setAuxiliaryBarMaximized(false); + } +} +registerAction2(RestoreAuxiliaryBar); class ToggleMaximizedAuxiliaryBar extends Action2 { diff --git a/src/vs/workbench/browser/parts/paneCompositePartService.ts b/src/vs/workbench/browser/parts/paneCompositePartService.ts index f697f8ce062..2e5aff4d035 100644 --- a/src/vs/workbench/browser/parts/paneCompositePartService.ts +++ b/src/vs/workbench/browser/parts/paneCompositePartService.ts @@ -5,6 +5,7 @@ import { Event } from '../../../base/common/event.js'; import { assertReturnsDefined } from '../../../base/common/types.js'; +import { InstantiationType, registerSingleton } from '../../../platform/instantiation/common/extensions.js'; import { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js'; import { IProgressIndicator } from '../../../platform/progress/common/progress.js'; import { PaneCompositeDescriptor } from '../panecomposite.js'; @@ -91,3 +92,5 @@ export class PaneCompositePartService extends Disposable implements IPaneComposi } } + +registerSingleton(IPaneCompositePartService, PaneCompositePartService, InstantiationType.Delayed); diff --git a/src/vs/workbench/browser/parts/panel/panelActions.ts b/src/vs/workbench/browser/parts/panel/panelActions.ts index 29e6459bfe5..3432144229c 100644 --- a/src/vs/workbench/browser/parts/panel/panelActions.ts +++ b/src/vs/workbench/browser/parts/panel/panelActions.ts @@ -8,20 +8,25 @@ import { localize, localize2 } from '../../../../nls.js'; import { KeyMod, KeyCode } from '../../../../base/common/keyCodes.js'; import { MenuId, MenuRegistry, registerAction2, Action2, IAction2Options } from '../../../../platform/actions/common/actions.js'; import { Categories } from '../../../../platform/action/common/actionCommonCategories.js'; -import { IWorkbenchLayoutService, PanelAlignment, Parts, Position, positionToString } from '../../../services/layout/browser/layoutService.js'; -import { PanelAlignmentContext, PanelPositionContext, PanelVisibleContext } from '../../../common/contextkeys.js'; -import { ContextKeyExpression } from '../../../../platform/contextkey/common/contextkey.js'; +import { isHorizontal, IWorkbenchLayoutService, PanelAlignment, Parts, Position, positionToString } from '../../../services/layout/browser/layoutService.js'; +import { IsAuxiliaryWindowContext, PanelAlignmentContext, PanelMaximizedContext, PanelPositionContext, PanelVisibleContext } from '../../../common/contextkeys.js'; +import { ContextKeyExpr, ContextKeyExpression } from '../../../../platform/contextkey/common/contextkey.js'; import { Codicon } from '../../../../base/common/codicons.js'; import { registerIcon } from '../../../../platform/theme/common/iconRegistry.js'; import { ServicesAccessor } from '../../../../editor/browser/editorExtensions.js'; import { ViewContainerLocation, IViewDescriptorService } from '../../../common/views.js'; import { IViewsService } from '../../../services/views/common/viewsService.js'; import { IPaneCompositePartService } from '../../../services/panecomposite/browser/panecomposite.js'; +import { INotificationService } from '../../../../platform/notification/common/notification.js'; import { ICommandActionTitle } from '../../../../platform/action/common/action.js'; import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; import { SwitchCompositeViewAction } from '../compositeBarActions.js'; -export const closeIcon = registerIcon('panel-close', Codicon.close, localize('closeIcon', 'Icon to close a panel.')); +const maximizeIcon = registerIcon('panel-maximize', Codicon.screenFull, localize('maximizeIcon', 'Icon to maximize a panel.')); +const restoreIcon = registerIcon('panel-restore', Codicon.screenNormal, localize('restoreIcon', 'Icon to restore a panel.')); +const closeIcon = registerIcon('panel-close', Codicon.close, localize('closeIcon', 'Icon to close a panel.')); +const panelIcon = registerIcon('panel-layout-icon', Codicon.layoutPanel, localize('togglePanelOffIcon', 'Icon to toggle the panel off when it is on.')); +const panelOffIcon = registerIcon('panel-layout-icon-off', Codicon.layoutPanelOff, localize('togglePanelOnIcon', 'Icon to toggle the panel on when it is off.')); export class TogglePanelAction extends Action2 { @@ -67,6 +72,16 @@ export class TogglePanelAction extends Action2 { registerAction2(TogglePanelAction); +MenuRegistry.appendMenuItem(MenuId.PanelTitle, { + command: { + id: TogglePanelAction.ID, + title: localize('closePanel', 'Hide Panel'), + icon: closeIcon + }, + group: 'navigation', + order: 2 +}); + registerAction2(class extends Action2 { constructor() { super({ @@ -258,6 +273,88 @@ registerAction2(class extends SwitchCompositeViewAction { } }); +const panelMaximizationSupportedWhen = ContextKeyExpr.or(PanelAlignmentContext.isEqualTo('center'), ContextKeyExpr.and(PanelPositionContext.notEqualsTo('bottom'), PanelPositionContext.notEqualsTo('top'))); +const ToggleMaximizedPanelActionId = 'workbench.action.toggleMaximizedPanel'; + +registerAction2(class extends Action2 { + constructor() { + super({ + id: ToggleMaximizedPanelActionId, + title: localize2('toggleMaximizedPanel', 'Toggle Maximized Panel'), + tooltip: localize('maximizePanel', "Maximize Panel Size"), + category: Categories.View, + f1: true, + icon: maximizeIcon, + precondition: panelMaximizationSupportedWhen, // the workbench grid currently prevents us from supporting panel maximization with non-center panel alignment + }); + } + run(accessor: ServicesAccessor) { + const layoutService = accessor.get(IWorkbenchLayoutService); + const notificationService = accessor.get(INotificationService); + if (layoutService.getPanelAlignment() !== 'center' && isHorizontal(layoutService.getPanelPosition())) { + notificationService.warn(localize('panelMaxNotSupported', "Maximizing the panel is only supported when it is center aligned.")); + return; + } + + if (!layoutService.isVisible(Parts.PANEL_PART)) { + layoutService.setPartHidden(false, Parts.PANEL_PART); + // If the panel is not already maximized, maximize it + if (!layoutService.isPanelMaximized()) { + layoutService.toggleMaximizedPanel(); + } + } + else { + layoutService.toggleMaximizedPanel(); + } + } +}); + +MenuRegistry.appendMenuItem(MenuId.PanelTitle, { + command: { + id: ToggleMaximizedPanelActionId, + title: localize('maximizePanel', "Maximize Panel Size"), + icon: maximizeIcon + }, + group: 'navigation', + order: 1, + when: ContextKeyExpr.and(panelMaximizationSupportedWhen, PanelMaximizedContext.negate()) +}); + +MenuRegistry.appendMenuItem(MenuId.PanelTitle, { + command: { + id: ToggleMaximizedPanelActionId, + title: localize('minimizePanel', "Restore Panel Size"), + icon: restoreIcon + }, + group: 'navigation', + order: 1, + when: ContextKeyExpr.and(panelMaximizationSupportedWhen, PanelMaximizedContext) +}); + +MenuRegistry.appendMenuItems([ + { + id: MenuId.LayoutControlMenu, + item: { + group: '2_pane_toggles', + command: { + id: TogglePanelAction.ID, + title: localize('togglePanel', "Toggle Panel"), + icon: panelOffIcon, + toggled: { condition: PanelVisibleContext, icon: panelIcon } + }, + when: + ContextKeyExpr.and( + IsAuxiliaryWindowContext.negate(), + ContextKeyExpr.or( + ContextKeyExpr.equals('config.workbench.layoutControl.type', 'toggles'), + ContextKeyExpr.equals('config.workbench.layoutControl.type', 'both') + ) + ), + order: 1 + } + } +]); + class MoveViewsBetweenPanelsAction extends Action2 { constructor(private readonly source: ViewContainerLocation, private readonly destination: ViewContainerLocation, desc: Readonly) { super(desc); diff --git a/src/vs/workbench/browser/parts/titlebar/titlebarActions.ts b/src/vs/workbench/browser/parts/titlebar/titlebarActions.ts index 91ca0aa12b7..0ef3554a764 100644 --- a/src/vs/workbench/browser/parts/titlebar/titlebarActions.ts +++ b/src/vs/workbench/browser/parts/titlebar/titlebarActions.ts @@ -50,215 +50,212 @@ export class ToggleTitleBarConfigAction extends Action2 { } } -export function registerTitleBarActions() { +registerAction2(class ToggleCommandCenter extends ToggleTitleBarConfigAction { + constructor() { + super(LayoutSettings.COMMAND_CENTER, localize('toggle.commandCenter', 'Command Center'), localize('toggle.commandCenterDescription', "Toggle visibility of the Command Center in title bar"), 1, IsCompactTitleBarContext.toNegated()); + } +}); - registerAction2(class ToggleCommandCenter extends ToggleTitleBarConfigAction { - constructor() { - super(LayoutSettings.COMMAND_CENTER, localize('toggle.commandCenter', 'Command Center'), localize('toggle.commandCenterDescription', "Toggle visibility of the Command Center in title bar"), 1, IsCompactTitleBarContext.toNegated()); - } - }); +registerAction2(class ToggleNavigationControl extends ToggleTitleBarConfigAction { + constructor() { + super('workbench.navigationControl.enabled', localize('toggle.navigation', 'Navigation Controls'), localize('toggle.navigationDescription', "Toggle visibility of the Navigation Controls in title bar"), 2, ContextKeyExpr.and(IsCompactTitleBarContext.toNegated(), ContextKeyExpr.has('config.window.commandCenter'))); + } +}); - registerAction2(class ToggleNavigationControl extends ToggleTitleBarConfigAction { - constructor() { - super('workbench.navigationControl.enabled', localize('toggle.navigation', 'Navigation Controls'), localize('toggle.navigationDescription', "Toggle visibility of the Navigation Controls in title bar"), 2, ContextKeyExpr.and(IsCompactTitleBarContext.toNegated(), ContextKeyExpr.has('config.window.commandCenter'))); - } - }); +registerAction2(class ToggleLayoutControl extends ToggleTitleBarConfigAction { + constructor() { + super(LayoutSettings.LAYOUT_ACTIONS, localize('toggle.layout', 'Layout Controls'), localize('toggle.layoutDescription', "Toggle visibility of the Layout Controls in title bar"), 4); + } +}); - registerAction2(class ToggleLayoutControl extends ToggleTitleBarConfigAction { - constructor() { - super(LayoutSettings.LAYOUT_ACTIONS, localize('toggle.layout', 'Layout Controls'), localize('toggle.layoutDescription', "Toggle visibility of the Layout Controls in title bar"), 4); - } - }); +registerAction2(class ToggleCustomTitleBar extends Action2 { + constructor() { + super({ + id: `toggle.${TitleBarSetting.CUSTOM_TITLE_BAR_VISIBILITY}`, + title: localize('toggle.hideCustomTitleBar', 'Hide Custom Title Bar'), + menu: [ + { id: MenuId.TitleBarContext, order: 0, when: ContextKeyExpr.equals(TitleBarStyleContext.key, TitlebarStyle.NATIVE), group: '3_toggle' }, + { id: MenuId.TitleBarTitleContext, order: 0, when: ContextKeyExpr.equals(TitleBarStyleContext.key, TitlebarStyle.NATIVE), group: '3_toggle' }, + ] + }); + } - registerAction2(class ToggleCustomTitleBar extends Action2 { - constructor() { - super({ - id: `toggle.${TitleBarSetting.CUSTOM_TITLE_BAR_VISIBILITY}`, - title: localize('toggle.hideCustomTitleBar', 'Hide Custom Title Bar'), - menu: [ - { id: MenuId.TitleBarContext, order: 0, when: ContextKeyExpr.equals(TitleBarStyleContext.key, TitlebarStyle.NATIVE), group: '3_toggle' }, - { id: MenuId.TitleBarTitleContext, order: 0, when: ContextKeyExpr.equals(TitleBarStyleContext.key, TitlebarStyle.NATIVE), group: '3_toggle' }, - ] - }); - } + run(accessor: ServicesAccessor, ...args: unknown[]): void { + const configService = accessor.get(IConfigurationService); + configService.updateValue(TitleBarSetting.CUSTOM_TITLE_BAR_VISIBILITY, CustomTitleBarVisibility.NEVER); + } +}); - run(accessor: ServicesAccessor, ...args: unknown[]): void { - const configService = accessor.get(IConfigurationService); - configService.updateValue(TitleBarSetting.CUSTOM_TITLE_BAR_VISIBILITY, CustomTitleBarVisibility.NEVER); - } - }); +registerAction2(class ToggleCustomTitleBarWindowed extends Action2 { + constructor() { + super({ + id: `toggle.${TitleBarSetting.CUSTOM_TITLE_BAR_VISIBILITY}.windowed`, + title: localize('toggle.hideCustomTitleBarInFullScreen', 'Hide Custom Title Bar In Full Screen'), + menu: [ + { id: MenuId.TitleBarContext, order: 1, when: IsMainWindowFullscreenContext, group: '3_toggle' }, + { id: MenuId.TitleBarTitleContext, order: 1, when: IsMainWindowFullscreenContext, group: '3_toggle' }, + ] + }); + } - registerAction2(class ToggleCustomTitleBarWindowed extends Action2 { - constructor() { - super({ - id: `toggle.${TitleBarSetting.CUSTOM_TITLE_BAR_VISIBILITY}.windowed`, - title: localize('toggle.hideCustomTitleBarInFullScreen', 'Hide Custom Title Bar In Full Screen'), - menu: [ - { id: MenuId.TitleBarContext, order: 1, when: IsMainWindowFullscreenContext, group: '3_toggle' }, - { id: MenuId.TitleBarTitleContext, order: 1, when: IsMainWindowFullscreenContext, group: '3_toggle' }, - ] - }); - } + run(accessor: ServicesAccessor, ...args: unknown[]): void { + const configService = accessor.get(IConfigurationService); + configService.updateValue(TitleBarSetting.CUSTOM_TITLE_BAR_VISIBILITY, CustomTitleBarVisibility.WINDOWED); + } +}); - run(accessor: ServicesAccessor, ...args: unknown[]): void { - const configService = accessor.get(IConfigurationService); - configService.updateValue(TitleBarSetting.CUSTOM_TITLE_BAR_VISIBILITY, CustomTitleBarVisibility.WINDOWED); - } - }); +class ToggleCustomTitleBar extends Action2 { - class ToggleCustomTitleBar extends Action2 { - - constructor() { - super({ - id: `toggle.toggleCustomTitleBar`, - title: localize('toggle.customTitleBar', 'Custom Title Bar'), - toggled: TitleBarVisibleContext, - menu: [ - { - id: MenuId.MenubarAppearanceMenu, - order: 6, - when: ContextKeyExpr.or( + constructor() { + super({ + id: `toggle.toggleCustomTitleBar`, + title: localize('toggle.customTitleBar', 'Custom Title Bar'), + toggled: TitleBarVisibleContext, + menu: [ + { + id: MenuId.MenubarAppearanceMenu, + order: 6, + when: ContextKeyExpr.or( + ContextKeyExpr.and( + ContextKeyExpr.equals(TitleBarStyleContext.key, TitlebarStyle.NATIVE), ContextKeyExpr.and( - ContextKeyExpr.equals(TitleBarStyleContext.key, TitlebarStyle.NATIVE), - ContextKeyExpr.and( - ContextKeyExpr.equals('config.workbench.layoutControl.enabled', false), - ContextKeyExpr.equals('config.window.commandCenter', false), - ContextKeyExpr.notEquals('config.workbench.editor.editorActionsLocation', 'titleBar'), - ContextKeyExpr.notEquals('config.workbench.activityBar.location', 'top'), - ContextKeyExpr.notEquals('config.workbench.activityBar.location', 'bottom') - )?.negate() - ), - IsMainWindowFullscreenContext + ContextKeyExpr.equals('config.workbench.layoutControl.enabled', false), + ContextKeyExpr.equals('config.window.commandCenter', false), + ContextKeyExpr.notEquals('config.workbench.editor.editorActionsLocation', 'titleBar'), + ContextKeyExpr.notEquals('config.workbench.activityBar.location', 'top'), + ContextKeyExpr.notEquals('config.workbench.activityBar.location', 'bottom') + )?.negate() ), - group: '2_workbench_layout' - }, - ], - }); - } + IsMainWindowFullscreenContext + ), + group: '2_workbench_layout' + }, + ], + }); + } - run(accessor: ServicesAccessor, ...args: unknown[]): void { - const configService = accessor.get(IConfigurationService); - const contextKeyService = accessor.get(IContextKeyService); - const titleBarVisibility = configService.getValue(TitleBarSetting.CUSTOM_TITLE_BAR_VISIBILITY); - switch (titleBarVisibility) { - case CustomTitleBarVisibility.NEVER: + run(accessor: ServicesAccessor, ...args: unknown[]): void { + const configService = accessor.get(IConfigurationService); + const contextKeyService = accessor.get(IContextKeyService); + const titleBarVisibility = configService.getValue(TitleBarSetting.CUSTOM_TITLE_BAR_VISIBILITY); + switch (titleBarVisibility) { + case CustomTitleBarVisibility.NEVER: + configService.updateValue(TitleBarSetting.CUSTOM_TITLE_BAR_VISIBILITY, CustomTitleBarVisibility.AUTO); + break; + case CustomTitleBarVisibility.WINDOWED: { + const isFullScreen = IsMainWindowFullscreenContext.evaluate(contextKeyService.getContext(null)); + if (isFullScreen) { configService.updateValue(TitleBarSetting.CUSTOM_TITLE_BAR_VISIBILITY, CustomTitleBarVisibility.AUTO); - break; - case CustomTitleBarVisibility.WINDOWED: { - const isFullScreen = IsMainWindowFullscreenContext.evaluate(contextKeyService.getContext(null)); - if (isFullScreen) { - configService.updateValue(TitleBarSetting.CUSTOM_TITLE_BAR_VISIBILITY, CustomTitleBarVisibility.AUTO); - } else { - configService.updateValue(TitleBarSetting.CUSTOM_TITLE_BAR_VISIBILITY, CustomTitleBarVisibility.NEVER); - } - break; - } - case CustomTitleBarVisibility.AUTO: - default: + } else { configService.updateValue(TitleBarSetting.CUSTOM_TITLE_BAR_VISIBILITY, CustomTitleBarVisibility.NEVER); - break; + } + break; } + case CustomTitleBarVisibility.AUTO: + default: + configService.updateValue(TitleBarSetting.CUSTOM_TITLE_BAR_VISIBILITY, CustomTitleBarVisibility.NEVER); + break; } } - registerAction2(ToggleCustomTitleBar); - - registerAction2(class ShowCustomTitleBar extends Action2 { - constructor() { - super({ - id: `showCustomTitleBar`, - title: localize2('showCustomTitleBar', "Show Custom Title Bar"), - precondition: TitleBarVisibleContext.negate(), - f1: true - }); - } - - run(accessor: ServicesAccessor, ...args: unknown[]): void { - const configService = accessor.get(IConfigurationService); - configService.updateValue(TitleBarSetting.CUSTOM_TITLE_BAR_VISIBILITY, CustomTitleBarVisibility.AUTO); - } - }); - - registerAction2(class HideCustomTitleBar extends Action2 { - constructor() { - super({ - id: `hideCustomTitleBar`, - title: localize2('hideCustomTitleBar', "Hide Custom Title Bar"), - precondition: TitleBarVisibleContext, - f1: true - }); - } - - run(accessor: ServicesAccessor, ...args: unknown[]): void { - const configService = accessor.get(IConfigurationService); - configService.updateValue(TitleBarSetting.CUSTOM_TITLE_BAR_VISIBILITY, CustomTitleBarVisibility.NEVER); - } - }); - - registerAction2(class HideCustomTitleBar extends Action2 { - constructor() { - super({ - id: `hideCustomTitleBarInFullScreen`, - title: localize2('hideCustomTitleBarInFullScreen', "Hide Custom Title Bar In Full Screen"), - precondition: ContextKeyExpr.and(TitleBarVisibleContext, IsMainWindowFullscreenContext), - f1: true - }); - } - - run(accessor: ServicesAccessor, ...args: unknown[]): void { - const configService = accessor.get(IConfigurationService); - configService.updateValue(TitleBarSetting.CUSTOM_TITLE_BAR_VISIBILITY, CustomTitleBarVisibility.WINDOWED); - } - }); - - registerAction2(class ToggleEditorActions extends Action2 { - static readonly settingsID = `workbench.editor.editorActionsLocation`; - constructor() { - - const titleBarContextCondition = ContextKeyExpr.and( - ContextKeyExpr.equals(`config.workbench.editor.showTabs`, 'none').negate(), - ContextKeyExpr.equals(`config.${ToggleEditorActions.settingsID}`, 'default'), - )?.negate(); - - super({ - id: `toggle.${ToggleEditorActions.settingsID}`, - title: localize('toggle.editorActions', 'Editor Actions'), - toggled: ContextKeyExpr.equals(`config.${ToggleEditorActions.settingsID}`, 'hidden').negate(), - menu: [ - { id: MenuId.TitleBarContext, order: 3, when: titleBarContextCondition, group: '2_config' }, - { id: MenuId.TitleBarTitleContext, order: 3, when: titleBarContextCondition, group: '2_config' } - ] - }); - } - - run(accessor: ServicesAccessor, ...args: unknown[]): void { - const configService = accessor.get(IConfigurationService); - const storageService = accessor.get(IStorageService); - - const location = configService.getValue(ToggleEditorActions.settingsID); - if (location === 'hidden') { - const showTabs = configService.getValue(LayoutSettings.EDITOR_TABS_MODE); - - // If tabs are visible, then set the editor actions to be in the title bar - if (showTabs !== 'none') { - configService.updateValue(ToggleEditorActions.settingsID, 'titleBar'); - } - - // If tabs are not visible, then set the editor actions to the last location the were before being hidden - else { - const storedValue = storageService.get(ToggleEditorActions.settingsID, StorageScope.PROFILE); - configService.updateValue(ToggleEditorActions.settingsID, storedValue ?? 'default'); - } - - storageService.remove(ToggleEditorActions.settingsID, StorageScope.PROFILE); - } - // Store the current value (titleBar or default) in the storage service for later to restore - else { - configService.updateValue(ToggleEditorActions.settingsID, 'hidden'); - storageService.store(ToggleEditorActions.settingsID, location, StorageScope.PROFILE, StorageTarget.USER); - } - } - }); } +registerAction2(ToggleCustomTitleBar); + +registerAction2(class ShowCustomTitleBar extends Action2 { + constructor() { + super({ + id: `showCustomTitleBar`, + title: localize2('showCustomTitleBar', "Show Custom Title Bar"), + precondition: TitleBarVisibleContext.negate(), + f1: true + }); + } + + run(accessor: ServicesAccessor, ...args: unknown[]): void { + const configService = accessor.get(IConfigurationService); + configService.updateValue(TitleBarSetting.CUSTOM_TITLE_BAR_VISIBILITY, CustomTitleBarVisibility.AUTO); + } +}); + +registerAction2(class HideCustomTitleBar extends Action2 { + constructor() { + super({ + id: `hideCustomTitleBar`, + title: localize2('hideCustomTitleBar', "Hide Custom Title Bar"), + precondition: TitleBarVisibleContext, + f1: true + }); + } + + run(accessor: ServicesAccessor, ...args: unknown[]): void { + const configService = accessor.get(IConfigurationService); + configService.updateValue(TitleBarSetting.CUSTOM_TITLE_BAR_VISIBILITY, CustomTitleBarVisibility.NEVER); + } +}); + +registerAction2(class HideCustomTitleBar extends Action2 { + constructor() { + super({ + id: `hideCustomTitleBarInFullScreen`, + title: localize2('hideCustomTitleBarInFullScreen', "Hide Custom Title Bar In Full Screen"), + precondition: ContextKeyExpr.and(TitleBarVisibleContext, IsMainWindowFullscreenContext), + f1: true + }); + } + + run(accessor: ServicesAccessor, ...args: unknown[]): void { + const configService = accessor.get(IConfigurationService); + configService.updateValue(TitleBarSetting.CUSTOM_TITLE_BAR_VISIBILITY, CustomTitleBarVisibility.WINDOWED); + } +}); + +registerAction2(class ToggleEditorActions extends Action2 { + static readonly settingsID = `workbench.editor.editorActionsLocation`; + constructor() { + + const titleBarContextCondition = ContextKeyExpr.and( + ContextKeyExpr.equals(`config.workbench.editor.showTabs`, 'none').negate(), + ContextKeyExpr.equals(`config.${ToggleEditorActions.settingsID}`, 'default'), + )?.negate(); + + super({ + id: `toggle.${ToggleEditorActions.settingsID}`, + title: localize('toggle.editorActions', 'Editor Actions'), + toggled: ContextKeyExpr.equals(`config.${ToggleEditorActions.settingsID}`, 'hidden').negate(), + menu: [ + { id: MenuId.TitleBarContext, order: 3, when: titleBarContextCondition, group: '2_config' }, + { id: MenuId.TitleBarTitleContext, order: 3, when: titleBarContextCondition, group: '2_config' } + ] + }); + } + + run(accessor: ServicesAccessor, ...args: unknown[]): void { + const configService = accessor.get(IConfigurationService); + const storageService = accessor.get(IStorageService); + + const location = configService.getValue(ToggleEditorActions.settingsID); + if (location === 'hidden') { + const showTabs = configService.getValue(LayoutSettings.EDITOR_TABS_MODE); + + // If tabs are visible, then set the editor actions to be in the title bar + if (showTabs !== 'none') { + configService.updateValue(ToggleEditorActions.settingsID, 'titleBar'); + } + + // If tabs are not visible, then set the editor actions to the last location the were before being hidden + else { + const storedValue = storageService.get(ToggleEditorActions.settingsID, StorageScope.PROFILE); + configService.updateValue(ToggleEditorActions.settingsID, storedValue ?? 'default'); + } + + storageService.remove(ToggleEditorActions.settingsID, StorageScope.PROFILE); + } + // Store the current value (titleBar or default) in the storage service for later to restore + else { + configService.updateValue(ToggleEditorActions.settingsID, 'hidden'); + storageService.store(ToggleEditorActions.settingsID, location, StorageScope.PROFILE, StorageTarget.USER); + } + } +}); // --- Toolbar actions --- // diff --git a/src/vs/workbench/browser/workbench.ts b/src/vs/workbench/browser/workbench.ts index b51ff75afb8..10e2c3edace 100644 --- a/src/vs/workbench/browser/workbench.ts +++ b/src/vs/workbench/browser/workbench.ts @@ -4,7 +4,6 @@ *--------------------------------------------------------------------------------------------*/ import './style.js'; -import { registerLayoutActions } from './actions/layoutActions.js'; import { runWhenWindowIdle } from '../../base/browser/dom.js'; import { Event, Emitter, setGlobalLeakWarningThreshold } from '../../base/common/event.js'; import { RunOnceScheduler, timeout } from '../../base/common/async.js'; @@ -51,10 +50,6 @@ import { AccessibleViewRegistry } from '../../platform/accessibility/browser/acc import { NotificationAccessibleView } from './parts/notifications/notificationAccessibleView.js'; import { IMarkdownRendererService } from '../../platform/markdown/browser/markdownRenderer.js'; import { EditorMarkdownCodeBlockRenderer } from '../../editor/browser/widget/markdownRenderer/browser/editorMarkdownCodeBlockRenderer.js'; -import { registerTitleBarActions } from './parts/titlebar/titlebarActions.js'; -import { IPaneCompositePartService } from '../services/panecomposite/browser/panecomposite.js'; -import { PaneCompositePartService } from './parts/paneCompositePartService.js'; -import { SyncDescriptor } from '../../platform/instantiation/common/descriptors.js'; export interface IWorkbenchOptions { @@ -89,10 +84,6 @@ export class Workbench extends Layout { mark('code/willStartWorkbench'); this.registerErrorHandler(logService); - - // Register layout actions specific to the default workbench - registerLayoutActions(); - registerTitleBarActions(); } private registerErrorHandler(logService: ILogService): void { @@ -202,7 +193,6 @@ export class Workbench extends Layout { // Layout Service serviceCollection.set(IWorkbenchLayoutService, this); - serviceCollection.set(IPaneCompositePartService, new SyncDescriptor(PaneCompositePartService, undefined, true)); // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! // @@ -213,7 +203,6 @@ export class Workbench extends Layout { // // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - // All Contributed Services const contributedServices = getSingletonServiceDescriptors(); for (const [id, descriptor] of contributedServices) { diff --git a/src/vs/workbench/electron-browser/desktop.main.ts b/src/vs/workbench/electron-browser/desktop.main.ts index 089db14d341..b4399ffbe70 100644 --- a/src/vs/workbench/electron-browser/desktop.main.ts +++ b/src/vs/workbench/electron-browser/desktop.main.ts @@ -67,11 +67,6 @@ import { AccountPolicyService } from '../services/policies/common/accountPolicyS import { MultiplexPolicyService } from '../services/policies/common/multiplexPolicyService.js'; import { WorkbenchModeService } from '../services/layout/browser/workbenchModeService.js'; import { IWorkbenchModeService } from '../services/layout/common/workbenchModeService.js'; -import { PaneCompositePartService } from '../browser/parts/paneCompositePartService.js'; -import { IPaneCompositePartService } from '../services/panecomposite/browser/panecomposite.js'; -import { InstantiationType, registerSingleton } from '../../platform/instantiation/common/extensions.js'; -import { ITitleService } from '../services/title/browser/titleService.js'; -import { NativeTitleService } from './parts/titlebar/titlebarPart.js'; export class DesktopMain extends Disposable { @@ -133,7 +128,6 @@ export class DesktopMain extends Disposable { this.applyWindowZoomLevel(services.configurationService); // Create Workbench - registerDefaultWorkbenchServices(); const workbench = new Workbench(mainWindow.document.body, { extraClasses: this.getExtraClasses(), resetLayout: this.configuration['disable-layout-restore'] === true @@ -176,7 +170,7 @@ export class DesktopMain extends Disposable { this._register(workbench.onDidShutdown(() => this.dispose())); } - private async initServices(): Promise<{ serviceCollection: ServiceCollection; logService: ILogService; storageService: NativeWorkbenchStorageService; configurationService: WorkspaceService }> { + private async initServices(): Promise<{ serviceCollection: ServiceCollection; logService: ILogService; storageService: NativeWorkbenchStorageService; configurationService: IConfigurationService }> { const serviceCollection = new ServiceCollection(); @@ -439,8 +433,3 @@ export function main(configuration: INativeWindowConfiguration): Promise { return workbench.open(); } - -function registerDefaultWorkbenchServices() { - registerSingleton(IPaneCompositePartService, PaneCompositePartService, InstantiationType.Delayed); - registerSingleton(ITitleService, NativeTitleService, InstantiationType.Eager); -} diff --git a/src/vs/workbench/services/title/electron-browser/titleService.ts b/src/vs/workbench/services/title/electron-browser/titleService.ts new file mode 100644 index 00000000000..a7d742993ce --- /dev/null +++ b/src/vs/workbench/services/title/electron-browser/titleService.ts @@ -0,0 +1,10 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { InstantiationType, registerSingleton } from '../../../../platform/instantiation/common/extensions.js'; +import { NativeTitleService } from '../../../electron-browser/parts/titlebar/titlebarPart.js'; +import { ITitleService } from '../browser/titleService.js'; + +registerSingleton(ITitleService, NativeTitleService, InstantiationType.Eager); diff --git a/src/vs/workbench/workbench.common.main.ts b/src/vs/workbench/workbench.common.main.ts index 50ff8569bf0..8b07bafcbce 100644 --- a/src/vs/workbench/workbench.common.main.ts +++ b/src/vs/workbench/workbench.common.main.ts @@ -18,6 +18,7 @@ import './browser/workbench.contribution.js'; import './browser/actions/textInputActions.js'; import './browser/actions/developerActions.js'; import './browser/actions/helpActions.js'; +import './browser/actions/layoutActions.js'; import './browser/actions/listCommands.js'; import './browser/actions/navigationActions.js'; import './browser/actions/windowActions.js'; @@ -42,6 +43,7 @@ import './api/browser/viewsExtensionPoint.js'; import './browser/parts/editor/editor.contribution.js'; import './browser/parts/editor/editorParts.js'; +import './browser/parts/paneCompositePartService.js'; import './browser/parts/banner/bannerPart.js'; import './browser/parts/statusbar/statusbarPart.js'; diff --git a/src/vs/workbench/workbench.desktop.main.ts b/src/vs/workbench/workbench.desktop.main.ts index e4e97056a0c..e720674e03f 100644 --- a/src/vs/workbench/workbench.desktop.main.ts +++ b/src/vs/workbench/workbench.desktop.main.ts @@ -41,6 +41,7 @@ import './services/menubar/electron-browser/menubarService.js'; import './services/update/electron-browser/updateService.js'; import './services/url/electron-browser/urlService.js'; import './services/lifecycle/electron-browser/lifecycleService.js'; +import './services/title/electron-browser/titleService.js'; import './services/host/electron-browser/nativeHostService.js'; import '../platform/meteredConnection/electron-browser/meteredConnectionService.js'; import './services/request/electron-browser/requestService.js'; diff --git a/src/vs/workbench/workbench.web.main.ts b/src/vs/workbench/workbench.web.main.ts index b58c41f674e..aee7366ed53 100644 --- a/src/vs/workbench/workbench.web.main.ts +++ b/src/vs/workbench/workbench.web.main.ts @@ -91,6 +91,8 @@ import { UserDataAutoSyncService } from '../platform/userDataSync/common/userDat import { AccessibilityService } from '../platform/accessibility/browser/accessibilityService.js'; import { ICustomEndpointTelemetryService } from '../platform/telemetry/common/telemetry.js'; import { NullEndpointTelemetryService } from '../platform/telemetry/common/telemetryUtils.js'; +import { ITitleService } from './services/title/browser/titleService.js'; +import { BrowserTitleService } from './browser/parts/titlebar/titlebarPart.js'; import { ITimerService, TimerService } from './services/timer/browser/timerService.js'; import { IDiagnosticsService, NullDiagnosticsService } from '../platform/diagnostics/common/diagnostics.js'; import { ILanguagePackService } from '../platform/languagePacks/common/languagePacks.js'; @@ -110,6 +112,7 @@ registerSingleton(IUserDataSyncAccountService, UserDataSyncAccountService, Insta registerSingleton(IUserDataSyncService, UserDataSyncService, InstantiationType.Delayed); registerSingleton(IUserDataSyncResourceProviderService, UserDataSyncResourceProviderService, InstantiationType.Delayed); registerSingleton(IUserDataAutoSyncService, UserDataAutoSyncService, InstantiationType.Eager /* Eager to start auto sync */); +registerSingleton(ITitleService, BrowserTitleService, InstantiationType.Eager); registerSingleton(IExtensionTipsService, ExtensionTipsService, InstantiationType.Delayed); registerSingleton(ITimerService, TimerService, InstantiationType.Delayed); registerSingleton(ICustomEndpointTelemetryService, NullEndpointTelemetryService, InstantiationType.Delayed);