revert to main

This commit is contained in:
Sandeep Somavarapu
2026-02-12 12:10:49 +01:00
parent 687db30f93
commit 71794ff7ce
15 changed files with 1335 additions and 921 deletions

View File

@@ -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'
]
},
{

View File

@@ -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

View File

@@ -12,7 +12,7 @@
//#region --- workbench common
import '../workbench/workbench.common.main.js';
import './workbench.common.main.js';
//#endregion

File diff suppressed because it is too large Load Diff

View File

@@ -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<void> {
const layoutService = accessor.get(IWorkbenchLayoutService);
layoutService.focusPart(Parts.ACTIVITYBAR_PART);
}
});
registerThemingParticipant((theme, collector) => {
const activityBarActiveBorderColor = theme.getColor(ACTIVITY_BAR_ACTIVE_BORDER);

View File

@@ -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 {

View File

@@ -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);

View File

@@ -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<IAction2Options>) {
super(desc);

View File

@@ -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<CustomTitleBarVisibility>(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<CustomTitleBarVisibility>(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<string>(ToggleEditorActions.settingsID);
if (location === 'hidden') {
const showTabs = configService.getValue<string>(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<string>(ToggleEditorActions.settingsID);
if (location === 'hidden') {
const showTabs = configService.getValue<string>(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 --- //

View File

@@ -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) {

View File

@@ -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<void> {
return workbench.open();
}
function registerDefaultWorkbenchServices() {
registerSingleton(IPaneCompositePartService, PaneCompositePartService, InstantiationType.Delayed);
registerSingleton(ITitleService, NativeTitleService, InstantiationType.Eager);
}

View File

@@ -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);

View File

@@ -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';

View File

@@ -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';

View File

@@ -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);