From 7020ccf1346ad505f1395748882a435c1743256b Mon Sep 17 00:00:00 2001 From: Sandeep Somavarapu Date: Tue, 2 Feb 2021 09:55:32 +0100 Subject: [PATCH] #115289 show only default containers in view menu --- .../api/browser/mainThreadComments.ts | 2 +- .../api/browser/viewsExtensionPoint.ts | 4 +- .../browser/actions/layoutActions.ts | 4 +- .../parts/activitybar/activitybarPart.ts | 2 +- .../browser/parts/panel/panelPart.ts | 2 +- .../browser/parts/views/viewsService.ts | 61 +++++++++---------- src/vs/workbench/common/views.ts | 45 +++++++++++--- .../browser/preview/bulkEdit.contribution.ts | 2 +- .../debug/browser/debug.contribution.ts | 12 ++-- .../browser/extensions.contribution.ts | 6 +- .../contrib/files/browser/explorerViewlet.ts | 6 +- .../markers/browser/markers.contribution.ts | 6 +- .../output/browser/output.contribution.ts | 6 +- .../contrib/remote/browser/remote.ts | 2 +- .../contrib/remote/browser/remoteExplorer.ts | 2 +- .../contrib/scm/browser/scm.contribution.ts | 6 +- .../search/browser/search.contribution.ts | 6 +- .../terminal/browser/terminal.contribution.ts | 6 +- .../testing/browser/testing.contribution.ts | 2 +- .../userDataSync/browser/userDataSync.ts | 2 +- .../views/browser/viewDescriptorService.ts | 2 +- .../views/common/viewContainerModel.ts | 2 +- .../test/browser/viewContainerModel.test.ts | 30 ++++----- .../browser/viewDescriptorService.test.ts | 4 +- .../browser/api/mainThreadTreeViews.test.ts | 2 +- 25 files changed, 114 insertions(+), 110 deletions(-) diff --git a/src/vs/workbench/api/browser/mainThreadComments.ts b/src/vs/workbench/api/browser/mainThreadComments.ts index 1f24a8276e9..64b607f7c58 100644 --- a/src/vs/workbench/api/browser/mainThreadComments.ts +++ b/src/vs/workbench/api/browser/mainThreadComments.ts @@ -473,7 +473,7 @@ export class MainThreadComments extends Disposable implements MainThreadComments if (!commentsViewAlreadyRegistered) { const VIEW_CONTAINER: ViewContainer = Registry.as(ViewExtensions.ViewContainersRegistry).registerViewContainer({ id: COMMENTS_VIEW_ID, - title: { value: localize('comments', "Comments"), original: 'Comments' }, + title: COMMENTS_VIEW_TITLE, ctorDescriptor: new SyncDescriptor(ViewPaneContainer, [COMMENTS_VIEW_ID, { mergeViewWithContainerWhenSingleView: true, donotShowContainerTitleWhenMergedWithContainer: true }]), storageId: COMMENTS_VIEW_TITLE, hideIfEmpty: true, diff --git a/src/vs/workbench/api/browser/viewsExtensionPoint.ts b/src/vs/workbench/api/browser/viewsExtensionPoint.ts index 93564df9080..4f841ded290 100644 --- a/src/vs/workbench/api/browser/viewsExtensionPoint.ts +++ b/src/vs/workbench/api/browser/viewsExtensionPoint.ts @@ -372,7 +372,7 @@ class ViewsExtensionHandler implements IWorkbenchContribution { viewContainer = this.viewContainersRegistry.registerViewContainer({ id, - title: { value: title, original: title }, extensionId, + title, extensionId, ctorDescriptor: new SyncDescriptor( ViewPaneContainer, [id, { mergeViewWithContainerWhenSingleView: true }] @@ -462,7 +462,7 @@ class ViewsExtensionHandler implements IWorkbenchContribution { name: item.name, when: ContextKeyExpr.deserialize(item.when), containerIcon: icon || viewContainer?.icon, - containerTitle: item.contextualTitle || viewContainer?.title.value, + containerTitle: item.contextualTitle || viewContainer?.title, canToggleVisibility: true, canMoveView: viewContainer?.id !== REMOTE, treeView: type === ViewType.Tree ? this.instantiationService.createInstance(CustomTreeView, item.id, item.name) : undefined, diff --git a/src/vs/workbench/browser/actions/layoutActions.ts b/src/vs/workbench/browser/actions/layoutActions.ts index d456dfa8964..7220bc5c04f 100644 --- a/src/vs/workbench/browser/actions/layoutActions.ts +++ b/src/vs/workbench/browser/actions/layoutActions.ts @@ -678,7 +678,7 @@ export class MoveFocusedViewAction extends Action { .map(viewletId => { return { id: viewletId, - label: this.viewDescriptorService.getViewContainerById(viewletId)!.title.value + label: this.viewDescriptorService.getViewContainerById(viewletId)!.title }; })); @@ -699,7 +699,7 @@ export class MoveFocusedViewAction extends Action { .map(panel => { return { id: panel.id, - label: this.viewDescriptorService.getViewContainerById(panel.id)!.title.value + label: this.viewDescriptorService.getViewContainerById(panel.id)!.title }; })); diff --git a/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts b/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts index b50868637c7..1d1e45550c0 100644 --- a/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts +++ b/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts @@ -812,7 +812,7 @@ export class ActivitybarPart extends Part implements IActivityBarService { } private addComposite(viewContainer: ViewContainer): void { - this.compositeBar.addComposite({ id: viewContainer.id, name: viewContainer.title.value, order: viewContainer.order, requestedIndex: viewContainer.requestedIndex }); + this.compositeBar.addComposite({ id: viewContainer.id, name: viewContainer.title, order: viewContainer.order, requestedIndex: viewContainer.requestedIndex }); } private hideComposite(compositeId: string): void { diff --git a/src/vs/workbench/browser/parts/panel/panelPart.ts b/src/vs/workbench/browser/parts/panel/panelPart.ts index 2724bfdfd81..aa6066a8dfb 100644 --- a/src/vs/workbench/browser/parts/panel/panelPart.ts +++ b/src/vs/workbench/browser/parts/panel/panelPart.ts @@ -310,7 +310,7 @@ export class PanelPart extends CompositePart implements IPanelService { } if (viewContainerModel.activeViewDescriptors.length) { contextKey.set(true); - this.compositeBar.addComposite({ id: viewContainer.id, name: viewContainer.title.value, order: viewContainer.order, requestedIndex: viewContainer.requestedIndex }); + this.compositeBar.addComposite({ id: viewContainer.id, name: viewContainer.title, order: viewContainer.order, requestedIndex: viewContainer.requestedIndex }); } else if (viewContainer.hideIfEmpty) { contextKey.set(false); this.hideComposite(viewContainer.id); diff --git a/src/vs/workbench/browser/parts/views/viewsService.ts b/src/vs/workbench/browser/parts/views/viewsService.ts index d97de6acbd5..991311f1aa8 100644 --- a/src/vs/workbench/browser/parts/views/viewsService.ts +++ b/src/vs/workbench/browser/parts/views/viewsService.ts @@ -142,24 +142,24 @@ export class ViewsService extends Disposable implements IViewsService { })); // Register Action to Open View Container - const defaultLocation = this.viewDescriptorService.getDefaultViewContainerLocation(viewContainer); - const commandAction = { - id: viewContainer.commandId ?? viewContainer.id, - title: viewContainer.title, - keybinding: viewContainer.keybindings ? { ...viewContainer.keybindings, weight: KeybindingWeight.WorkbenchContrib } : undefined - }; + const commandId = viewContainer.commandId ?? viewContainer.id; + const that = this; this._register(registerAction2(class OpenViewContainerAction extends Action2 { constructor() { super({ - id: commandAction.id, - title: commandAction.title, - keybinding: commandAction.keybinding, - menu: [{ - id: MenuId.MenubarViewMenu, - group: defaultLocation === ViewContainerLocation.Sidebar ? '3_views' : '4_panels', - when: ContextKeyExpr.has(getEnabledViewContainerContextKey(viewContainer.id)), - order: viewContainer.order ?? Number.MAX_VALUE - }] + id: commandId, + get title(): ICommandActionTitle { + const viewContainerLocation = that.viewDescriptorService.getViewContainerLocation(viewContainer); + if (viewContainerLocation === ViewContainerLocation.Sidebar) { + return { value: localize('show view', "Show {0}", viewContainer.title), original: `Show ${viewContainer.title}` }; + } else { + return { value: localize('toggle view', "Toggle {0}", viewContainer.title), original: `Toggle ${viewContainer.title}` }; + } + }, + category: CATEGORIES.View.value, + precondition: ContextKeyExpr.has(getEnabledViewContainerContextKey(viewContainer.id)), + keybinding: viewContainer.keybindings ? { ...viewContainer.keybindings, weight: KeybindingWeight.WorkbenchContrib } : undefined, + f1: true }); } public async run(serviceAccessor: ServicesAccessor): Promise { @@ -186,22 +186,19 @@ export class ViewsService extends Disposable implements IViewsService { } } })); - const that = this; - this._register(MenuRegistry.appendMenuItem(MenuId.CommandPalette, { - command: { - id: commandAction.id, - get title(): ICommandActionTitle { - const viewContainerLocation = that.viewDescriptorService.getViewContainerLocation(viewContainer); - if (viewContainerLocation === ViewContainerLocation.Sidebar) { - return { value: localize('show view', "Show {0}", commandAction.title.value), original: `Show ${commandAction.title.value}` }; - } else { - return { value: localize('toggle view', "Toggle {0}", commandAction.title.value), original: `Toggle ${commandAction.title.value}` }; - } + + if (viewContainer.mnemonicTitle) { + const defaultLocation = this.viewDescriptorService.getDefaultViewContainerLocation(viewContainer); + this._register(MenuRegistry.appendMenuItem(MenuId.MenubarViewMenu, { + command: { + id: commandId, + title: viewContainer.mnemonicTitle, }, - category: CATEGORIES.View.value, - precondition: ContextKeyExpr.has(getEnabledViewContainerContextKey(viewContainer.id)), - } - })); + group: defaultLocation === ViewContainerLocation.Sidebar ? '3_views' : '4_panels', + when: ContextKeyExpr.has(getEnabledViewContainerContextKey(viewContainer.id)), + order: viewContainer.order ?? Number.MAX_VALUE + })); + } } private onDidChangeContainerLocation(viewContainer: ViewContainer, from: ViewContainerLocation, to: ViewContainerLocation): void { @@ -529,7 +526,7 @@ export class ViewsService extends Disposable implements IViewsService { Registry.as(PanelExtensions.Panels).registerPanel(PanelDescriptor.create( PaneContainerPanel, viewContainer.id, - viewContainer.title.value, + viewContainer.title, undefined, viewContainer.order, viewContainer.requestedIndex, @@ -564,7 +561,7 @@ export class ViewsService extends Disposable implements IViewsService { Registry.as(ViewletExtensions.Viewlets).registerViewlet(ViewletDescriptor.create( PaneContainerViewlet, viewContainer.id, - viewContainer.title.value, + viewContainer.title, isString(viewContainer.icon) ? viewContainer.icon : undefined, viewContainer.order, viewContainer.requestedIndex, diff --git a/src/vs/workbench/common/views.ts b/src/vs/workbench/common/views.ts index 42097d9ba82..921bf2fd45a 100644 --- a/src/vs/workbench/common/views.ts +++ b/src/vs/workbench/common/views.ts @@ -28,7 +28,6 @@ import { mixin } from 'vs/base/common/objects'; import { Codicon } from 'vs/base/common/codicons'; import { registerIcon } from 'vs/platform/theme/common/iconRegistry'; import { CancellationToken } from 'vs/base/common/cancellation'; -import { ILocalizedString } from 'vs/platform/actions/common/actions'; export const defaultViewIcon = registerIcon('default-view-icon', Codicon.window, localize('defaultViewIcon', 'Default view icon.')); @@ -64,8 +63,27 @@ export interface IViewContainerDescriptor { /** * The title of the view container */ - readonly title: ILocalizedString & { mnemonic?: string }; + readonly title: string; + /** + * The mnemonic title of the view container. + * If provided, container entry is also shown in Menubar > Views. + */ + readonly mnemonicTitle?: string; + + /** + * Icon representation of the View container + */ + readonly icon?: ThemeIcon | URI; + + /** + * Order of the view container. + */ + readonly order?: number; + + /** + * IViewPaneContainer Ctor to instantiate + */ readonly ctorDescriptor: SyncDescriptor; /** @@ -74,26 +92,33 @@ export interface IViewContainerDescriptor { readonly keybindings?: IKeybindings & { when?: ContextKeyExpression }; /** - * The command id to open the view container + * The command id to register to open the view container. + * If not provided, id of the view container is used. */ readonly commandId?: string; + /** + * Storage id to use to store the view container state. + * If not provided, it will be derived. + */ readonly storageId?: string; - readonly icon?: ThemeIcon | URI; + /** + * If enabled, view container is not shown if it has no active views. + */ + readonly hideIfEmpty?: boolean; + + /** + * Id of the extension that contributed the view container + */ + readonly extensionId?: ExtensionIdentifier; readonly alwaysUseContainerInfo?: boolean; readonly viewOrderDelegate?: ViewOrderDelegate; - readonly hideIfEmpty?: boolean; - - readonly extensionId?: ExtensionIdentifier; - readonly rejectAddedViews?: boolean; - readonly order?: number; - requestedIndex?: number; } diff --git a/src/vs/workbench/contrib/bulkEdit/browser/preview/bulkEdit.contribution.ts b/src/vs/workbench/contrib/bulkEdit/browser/preview/bulkEdit.contribution.ts index 32ba9067067..4b59a05c41d 100644 --- a/src/vs/workbench/contrib/bulkEdit/browser/preview/bulkEdit.contribution.ts +++ b/src/vs/workbench/contrib/bulkEdit/browser/preview/bulkEdit.contribution.ts @@ -346,7 +346,7 @@ const refactorPreviewViewIcon = registerIcon('refactor-preview-view-icon', Codic const container = Registry.as(ViewContainerExtensions.ViewContainersRegistry).registerViewContainer({ id: BulkEditPane.ID, - title: { value: localize('panel', "Refactor Preview"), original: 'Refactor Preview' }, + title: localize('panel', "Refactor Preview"), hideIfEmpty: true, ctorDescriptor: new SyncDescriptor( ViewPaneContainer, diff --git a/src/vs/workbench/contrib/debug/browser/debug.contribution.ts b/src/vs/workbench/contrib/debug/browser/debug.contribution.ts index e7fc136b40f..7ac91b5fcab 100644 --- a/src/vs/workbench/contrib/debug/browser/debug.contribution.ts +++ b/src/vs/workbench/contrib/debug/browser/debug.contribution.ts @@ -329,10 +329,8 @@ function registerDebugPanel(): void { const VIEW_CONTAINER: ViewContainer = Registry.as(ViewExtensions.ViewContainersRegistry).registerViewContainer({ id: DEBUG_PANEL_ID, - title: { - value: nls.localize({ comment: ['Debug is a noun in this context, not a verb.'], key: 'debugPanel' }, 'Debug Console'), original: 'Debug Console', - mnemonic: nls.localize({ key: 'miToggleDebugConsole', comment: ['&& denotes a mnemonic'] }, "De&&bug Console") - }, + title: nls.localize({ comment: ['Debug is a noun in this context, not a verb.'], key: 'debugPanel' }, 'Debug Console'), + mnemonicTitle: nls.localize({ key: 'miToggleDebugConsole', comment: ['&& denotes a mnemonic'] }, "De&&bug Console"), keybindings: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_Y }, commandId: 'workbench.debug.action.toggleRepl', icon: icons.debugConsoleViewIcon, @@ -357,10 +355,8 @@ function registerDebugPanel(): void { function registerDebugView(): void { const viewContainer = Registry.as(ViewExtensions.ViewContainersRegistry).registerViewContainer({ id: VIEWLET_ID, - title: { - value: nls.localize('run and debug', "Run and Debug"), original: 'Run and Debug', - mnemonic: nls.localize({ key: 'miViewRun', comment: ['&& denotes a mnemonic'] }, "&&Run"), - }, + title: nls.localize('run and debug', "Run and Debug"), + mnemonicTitle: nls.localize({ key: 'miViewRun', comment: ['&& denotes a mnemonic'] }, "&&Run"), keybindings: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_D }, ctorDescriptor: new SyncDescriptor(DebugViewPaneContainer), icon: icons.runViewIcon, diff --git a/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts b/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts index b9a34138d4d..96cd2d53d54 100644 --- a/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts +++ b/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts @@ -100,10 +100,8 @@ Registry.as(EditorExtensions.Editors).registerEditor( Registry.as(ViewContainerExtensions.ViewContainersRegistry).registerViewContainer( { id: VIEWLET_ID, - title: { - value: localize('extensions', "Extensions"), original: 'Extensions', - mnemonic: localize({ key: 'miViewExtensions', comment: ['&& denotes a mnemonic'] }, "E&&xtensions"), - }, + title: localize('extensions', "Extensions"), + mnemonicTitle: localize({ key: 'miViewExtensions', comment: ['&& denotes a mnemonic'] }, "E&&xtensions"), keybindings: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_X }, ctorDescriptor: new SyncDescriptor(ExtensionsViewPaneContainer), icon: extensionsViewIcon, diff --git a/src/vs/workbench/contrib/files/browser/explorerViewlet.ts b/src/vs/workbench/contrib/files/browser/explorerViewlet.ts index 6bc7d0e00c0..21acf217992 100644 --- a/src/vs/workbench/contrib/files/browser/explorerViewlet.ts +++ b/src/vs/workbench/contrib/files/browser/explorerViewlet.ts @@ -270,10 +270,8 @@ const viewContainerRegistry = Registry.as(Extensions.Vi */ export const VIEW_CONTAINER: ViewContainer = viewContainerRegistry.registerViewContainer({ id: VIEWLET_ID, - title: { - value: localize('explore', "Explorer"), original: 'Explorer', - mnemonic: localize({ key: 'miViewExplorer', comment: ['&& denotes a mnemonic'] }, "&&Explorer") - }, + title: localize('explore', "Explorer"), + mnemonicTitle: localize({ key: 'miViewExplorer', comment: ['&& denotes a mnemonic'] }, "&&Explorer"), keybindings: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_E }, ctorDescriptor: new SyncDescriptor(ExplorerViewPaneContainer), storageId: 'workbench.explorer.views.state', diff --git a/src/vs/workbench/contrib/markers/browser/markers.contribution.ts b/src/vs/workbench/contrib/markers/browser/markers.contribution.ts index ac0f1c5177a..4e5bc2ccb72 100644 --- a/src/vs/workbench/contrib/markers/browser/markers.contribution.ts +++ b/src/vs/workbench/contrib/markers/browser/markers.contribution.ts @@ -109,10 +109,8 @@ const markersViewIcon = registerIcon('markers-view-icon', Codicon.warning, local // markers view container const VIEW_CONTAINER: ViewContainer = Registry.as(ViewContainerExtensions.ViewContainersRegistry).registerViewContainer({ id: Constants.MARKERS_CONTAINER_ID, - title: { - value: Messages.MARKERS_PANEL_TITLE_PROBLEMS, original: 'Problems', - mnemonic: localize({ key: 'miMarker', comment: ['&& denotes a mnemonic'] }, "&&Problems") - }, + title: Messages.MARKERS_PANEL_TITLE_PROBLEMS, + mnemonicTitle: localize({ key: 'miMarker', comment: ['&& denotes a mnemonic'] }, "&&Problems"), keybindings: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_M }, commandId: 'workbench.actions.view.problems', icon: markersViewIcon, diff --git a/src/vs/workbench/contrib/output/browser/output.contribution.ts b/src/vs/workbench/contrib/output/browser/output.contribution.ts index 148cd9fd94d..9bbe29d9d7e 100644 --- a/src/vs/workbench/contrib/output/browser/output.contribution.ts +++ b/src/vs/workbench/contrib/output/browser/output.contribution.ts @@ -54,10 +54,8 @@ ModesRegistry.registerLanguage({ const outputViewIcon = registerIcon('output-view-icon', Codicon.output, nls.localize('outputViewIcon', 'View icon of the output view.')); const VIEW_CONTAINER: ViewContainer = Registry.as(ViewContainerExtensions.ViewContainersRegistry).registerViewContainer({ id: OUTPUT_VIEW_ID, - title: { - value: nls.localize('output', "Output"), original: 'Output', - mnemonic: nls.localize({ key: 'miToggleOutput', comment: ['&& denotes a mnemonic'] }, "&&Output") - }, + title: nls.localize('output', "Output"), + mnemonicTitle: nls.localize({ key: 'miToggleOutput', comment: ['&& denotes a mnemonic'] }, "&&Output"), keybindings: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_U, linux: { diff --git a/src/vs/workbench/contrib/remote/browser/remote.ts b/src/vs/workbench/contrib/remote/browser/remote.ts index 687bb705979..bb18656a314 100644 --- a/src/vs/workbench/contrib/remote/browser/remote.ts +++ b/src/vs/workbench/contrib/remote/browser/remote.ts @@ -543,7 +543,7 @@ registerAction2(SwitchRemoteAction); Registry.as(Extensions.ViewContainersRegistry).registerViewContainer( { id: VIEWLET_ID, - title: { value: nls.localize('remote.explorer', "Remote Explorer"), original: 'Remote Explorer' }, + title: nls.localize('remote.explorer', "Remote Explorer"), ctorDescriptor: new SyncDescriptor(RemoteViewPaneContainer), hideIfEmpty: true, viewOrderDelegate: { diff --git a/src/vs/workbench/contrib/remote/browser/remoteExplorer.ts b/src/vs/workbench/contrib/remote/browser/remoteExplorer.ts index d6d48ac3c1e..509eb7c1556 100644 --- a/src/vs/workbench/contrib/remote/browser/remoteExplorer.ts +++ b/src/vs/workbench/contrib/remote/browser/remoteExplorer.ts @@ -68,7 +68,7 @@ export class ForwardedPortsView extends Disposable implements IWorkbenchContribu if (await this.usePanelTreatment()) { return Registry.as(Extensions.ViewContainersRegistry).registerViewContainer({ id: TunnelPanel.ID, - title: { value: nls.localize('ports', "Ports"), original: 'Ports' }, + title: nls.localize('ports', "Ports"), icon: portsViewIcon, ctorDescriptor: new SyncDescriptor(ViewPaneContainer, [TunnelPanel.ID, { mergeViewWithContainerWhenSingleView: true, donotShowContainerTitleWhenMergedWithContainer: true }]), storageId: TunnelPanel.ID, diff --git a/src/vs/workbench/contrib/scm/browser/scm.contribution.ts b/src/vs/workbench/contrib/scm/browser/scm.contribution.ts index 710dc447d34..5f67e1144c8 100644 --- a/src/vs/workbench/contrib/scm/browser/scm.contribution.ts +++ b/src/vs/workbench/contrib/scm/browser/scm.contribution.ts @@ -43,10 +43,8 @@ const sourceControlViewIcon = registerIcon('source-control-view-icon', Codicon.s const viewContainer = Registry.as(ViewContainerExtensions.ViewContainersRegistry).registerViewContainer({ id: VIEWLET_ID, - title: { - value: localize('source control', "Source Control"), original: 'Source Control', - mnemonic: localize({ key: 'miViewSCM', comment: ['&& denotes a mnemonic'] }, "S&&CM") - }, + title: localize('source control', "Source Control"), + mnemonicTitle: localize({ key: 'miViewSCM', comment: ['&& denotes a mnemonic'] }, "S&&CM"), keybindings: { primary: 0, win: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_G }, diff --git a/src/vs/workbench/contrib/search/browser/search.contribution.ts b/src/vs/workbench/contrib/search/browser/search.contribution.ts index 35846ebe7ee..1f9886f5eea 100644 --- a/src/vs/workbench/contrib/search/browser/search.contribution.ts +++ b/src/vs/workbench/contrib/search/browser/search.contribution.ts @@ -618,10 +618,8 @@ const SEARCH_MODE_CONFIG = 'search.mode'; const viewContainer = Registry.as(ViewExtensions.ViewContainersRegistry).registerViewContainer({ id: VIEWLET_ID, - title: { - value: nls.localize('name', "Search"), original: 'Search', - mnemonic: nls.localize({ key: 'miViewSearch', comment: ['&& denotes a mnemonic'] }, "&&Search") - }, + title: nls.localize('name', "Search"), + mnemonicTitle: nls.localize({ key: 'miViewSearch', comment: ['&& denotes a mnemonic'] }, "&&Search"), keybindings: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_F, // View: Show Search is used for the keybindings in the View menu and the sidebar #115556, but it should only be enabled when search.mode == view, or else it will steal priority over opening a search editor #115511 diff --git a/src/vs/workbench/contrib/terminal/browser/terminal.contribution.ts b/src/vs/workbench/contrib/terminal/browser/terminal.contribution.ts index 7e7c5140ba7..b733cf123e2 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminal.contribution.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminal.contribution.ts @@ -63,10 +63,8 @@ configurationRegistry.registerConfiguration(terminalConfiguration); // Register views const VIEW_CONTAINER = Registry.as(ViewContainerExtensions.ViewContainersRegistry).registerViewContainer({ id: TERMINAL_VIEW_ID, - title: { - value: nls.localize('terminal', "Terminal"), original: 'Terminal', - mnemonic: nls.localize({ key: 'miToggleIntegratedTerminal', comment: ['&& denotes a mnemonic'] }, "&&Terminal") - }, + title: nls.localize('terminal', "Terminal"), + mnemonicTitle: nls.localize({ key: 'miToggleIntegratedTerminal', comment: ['&& denotes a mnemonic'] }, "&&Terminal"), keybindings: { primary: KeyMod.CtrlCmd | KeyCode.US_BACKTICK, mac: { primary: KeyMod.WinCtrl | KeyCode.US_BACKTICK } diff --git a/src/vs/workbench/contrib/testing/browser/testing.contribution.ts b/src/vs/workbench/contrib/testing/browser/testing.contribution.ts index 6dbfb4cec45..8d8bf3dafad 100644 --- a/src/vs/workbench/contrib/testing/browser/testing.contribution.ts +++ b/src/vs/workbench/contrib/testing/browser/testing.contribution.ts @@ -38,7 +38,7 @@ registerSingleton(IWorkspaceTestCollectionService, WorkspaceTestCollectionServic const viewContainer = Registry.as(ViewContainerExtensions.ViewContainersRegistry).registerViewContainer({ id: Testing.ViewletId, - title: { value: localize('test', "Test"), original: 'Test' }, + title: localize('test', "Test"), ctorDescriptor: new SyncDescriptor(TestingViewPaneContainer), icon: testingViewIcon, alwaysUseContainerInfo: true, diff --git a/src/vs/workbench/contrib/userDataSync/browser/userDataSync.ts b/src/vs/workbench/contrib/userDataSync/browser/userDataSync.ts index 7d799c0674b..33b6202653d 100644 --- a/src/vs/workbench/contrib/userDataSync/browser/userDataSync.ts +++ b/src/vs/workbench/contrib/userDataSync/browser/userDataSync.ts @@ -1136,7 +1136,7 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo return Registry.as(Extensions.ViewContainersRegistry).registerViewContainer( { id: SYNC_VIEW_CONTAINER_ID, - title: { value: SYNC_TITLE, original: 'Settings Sync' }, + title: SYNC_TITLE, ctorDescriptor: new SyncDescriptor( ViewPaneContainer, [SYNC_VIEW_CONTAINER_ID, { mergeViewWithContainerWhenSingleView: true }] diff --git a/src/vs/workbench/services/views/browser/viewDescriptorService.ts b/src/vs/workbench/services/views/browser/viewDescriptorService.ts index 1413a120231..a742ef1a517 100644 --- a/src/vs/workbench/services/views/browser/viewDescriptorService.ts +++ b/src/vs/workbench/services/views/browser/viewDescriptorService.ts @@ -463,7 +463,7 @@ export class ViewDescriptorService extends Disposable implements IViewDescriptor const container = this.viewContainersRegistry.registerViewContainer({ id, ctorDescriptor: new SyncDescriptor(ViewPaneContainer, [id, { mergeViewWithContainerWhenSingleView: true, donotShowContainerTitleWhenMergedWithContainer: true }]), - title: { value: 'Custom Views', original: 'Custom Views' }, // we don't want to see this, so no need to localize + title: 'Custom Views', // we don't want to see this, so no need to localize icon: location === ViewContainerLocation.Sidebar ? defaultViewIcon : undefined, storageId: getViewContainerStorageId(id), hideIfEmpty: true diff --git a/src/vs/workbench/services/views/common/viewContainerModel.ts b/src/vs/workbench/services/views/common/viewContainerModel.ts index 1abbe69c844..406719873b5 100644 --- a/src/vs/workbench/services/views/common/viewContainerModel.ts +++ b/src/vs/workbench/services/views/common/viewContainerModel.ts @@ -341,7 +341,7 @@ export class ViewContainerModel extends Disposable implements IViewContainerMode private updateContainerInfo(): void { /* Use default container info if one of the visible view descriptors belongs to the current container by default */ const useDefaultContainerInfo = this.viewContainer.alwaysUseContainerInfo || this.visibleViewDescriptors.length === 0 || this.visibleViewDescriptors.some(v => Registry.as(ViewExtensions.ViewsRegistry).getViewContainer(v.id) === this.viewContainer); - const title = useDefaultContainerInfo ? this.viewContainer.title.value : this.visibleViewDescriptors[0]?.containerTitle || this.visibleViewDescriptors[0]?.name || ''; + const title = useDefaultContainerInfo ? this.viewContainer.title : this.visibleViewDescriptors[0]?.containerTitle || this.visibleViewDescriptors[0]?.name || ''; let titleChanged: boolean = false; if (this._title !== title) { this._title = title; diff --git a/src/vs/workbench/services/views/test/browser/viewContainerModel.test.ts b/src/vs/workbench/services/views/test/browser/viewContainerModel.test.ts index 119679ab755..e567ef94bf0 100644 --- a/src/vs/workbench/services/views/test/browser/viewContainerModel.test.ts +++ b/src/vs/workbench/services/views/test/browser/viewContainerModel.test.ts @@ -61,13 +61,13 @@ suite('ViewContainerModel', () => { }); test('empty model', function () { - container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: { value: 'test', original: 'test' }, ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); + container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); const testObject = viewDescriptorService.getViewContainerModel(container); assert.equal(testObject.visibleViewDescriptors.length, 0); }); test('register/unregister', () => { - container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: { value: 'test', original: 'test' }, ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); + container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); const testObject = viewDescriptorService.getViewContainerModel(container); const target = disposableStore.add(new ViewDescriptorSequence(testObject)); @@ -94,7 +94,7 @@ suite('ViewContainerModel', () => { }); test('when contexts', async function () { - container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: { value: 'test', original: 'test' }, ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); + container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); const testObject = viewDescriptorService.getViewContainerModel(container); const target = disposableStore.add(new ViewDescriptorSequence(testObject)); assert.equal(testObject.visibleViewDescriptors.length, 0); @@ -138,7 +138,7 @@ suite('ViewContainerModel', () => { }); test('when contexts - multiple', async function () { - container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: { value: 'test', original: 'test' }, ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); + container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); const testObject = viewDescriptorService.getViewContainerModel(container); const target = disposableStore.add(new ViewDescriptorSequence(testObject)); const view1: IViewDescriptor = { id: 'view1', ctorDescriptor: null!, name: 'Test View 1' }; @@ -161,7 +161,7 @@ suite('ViewContainerModel', () => { }); test('when contexts - multiple 2', async function () { - container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: { value: 'test', original: 'test' }, ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); + container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); const testObject = viewDescriptorService.getViewContainerModel(container); const target = disposableStore.add(new ViewDescriptorSequence(testObject)); const view1: IViewDescriptor = { id: 'view1', ctorDescriptor: null!, name: 'Test View 1', when: ContextKeyExpr.equals('showview1', true) }; @@ -184,7 +184,7 @@ suite('ViewContainerModel', () => { }); test('setVisible', () => { - container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: { value: 'test', original: 'test' }, ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); + container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); const testObject = viewDescriptorService.getViewContainerModel(container); const target = disposableStore.add(new ViewDescriptorSequence(testObject)); const view1: IViewDescriptor = { id: 'view1', ctorDescriptor: null!, name: 'Test View 1', canToggleVisibility: true }; @@ -229,7 +229,7 @@ suite('ViewContainerModel', () => { }); test('move', () => { - container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: { value: 'test', original: 'test' }, ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); + container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); const testObject = viewDescriptorService.getViewContainerModel(container); const target = disposableStore.add(new ViewDescriptorSequence(testObject)); const view1: IViewDescriptor = { id: 'view1', ctorDescriptor: null!, name: 'Test View 1' }; @@ -259,7 +259,7 @@ suite('ViewContainerModel', () => { test('view states', async function () { storageService.store(`${container.id}.state.hidden`, JSON.stringify([{ id: 'view1', isHidden: true }]), StorageScope.GLOBAL, StorageTarget.MACHINE); - container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: { value: 'test', original: 'test' }, ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); + container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); const testObject = viewDescriptorService.getViewContainerModel(container); const target = disposableStore.add(new ViewDescriptorSequence(testObject)); @@ -279,7 +279,7 @@ suite('ViewContainerModel', () => { test('view states and when contexts', async function () { storageService.store(`${container.id}.state.hidden`, JSON.stringify([{ id: 'view1', isHidden: true }]), StorageScope.GLOBAL, StorageTarget.MACHINE); - container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: { value: 'test', original: 'test' }, ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); + container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); const testObject = viewDescriptorService.getViewContainerModel(container); const target = disposableStore.add(new ViewDescriptorSequence(testObject)); @@ -309,7 +309,7 @@ suite('ViewContainerModel', () => { test('view states and when contexts multiple views', async function () { storageService.store(`${container.id}.state.hidden`, JSON.stringify([{ id: 'view1', isHidden: true }]), StorageScope.GLOBAL, StorageTarget.MACHINE); - container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: { value: 'test', original: 'test' }, ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); + container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); const testObject = viewDescriptorService.getViewContainerModel(container); const target = disposableStore.add(new ViewDescriptorSequence(testObject)); @@ -354,7 +354,7 @@ suite('ViewContainerModel', () => { }); test('remove event is not triggered if view was hidden and removed', async function () { - container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: { value: 'test', original: 'test' }, ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); + container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); const testObject = viewDescriptorService.getViewContainerModel(container); const target = disposableStore.add(new ViewDescriptorSequence(testObject)); const viewDescriptor: IViewDescriptor = { @@ -383,7 +383,7 @@ suite('ViewContainerModel', () => { }); test('add event is not triggered if view was set visible (when visible) and not active', async function () { - container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: { value: 'test', original: 'test' }, ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); + container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); const testObject = viewDescriptorService.getViewContainerModel(container); const target = disposableStore.add(new ViewDescriptorSequence(testObject)); const viewDescriptor: IViewDescriptor = { @@ -409,7 +409,7 @@ suite('ViewContainerModel', () => { }); test('remove event is not triggered if view was hidden and not active', async function () { - container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: { value: 'test', original: 'test' }, ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); + container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); const testObject = viewDescriptorService.getViewContainerModel(container); const target = disposableStore.add(new ViewDescriptorSequence(testObject)); const viewDescriptor: IViewDescriptor = { @@ -435,7 +435,7 @@ suite('ViewContainerModel', () => { }); test('add event is not triggered if view was set visible (when not visible) and not active', async function () { - container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: { value: 'test', original: 'test' }, ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); + container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); const testObject = viewDescriptorService.getViewContainerModel(container); const target = disposableStore.add(new ViewDescriptorSequence(testObject)); const viewDescriptor: IViewDescriptor = { @@ -465,7 +465,7 @@ suite('ViewContainerModel', () => { }); test('added view descriptors are in ascending order in the event', async function () { - container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: { value: 'test', original: 'test' }, ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); + container = ViewContainerRegistry.registerViewContainer({ id: 'test', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); const testObject = viewDescriptorService.getViewContainerModel(container); const target = disposableStore.add(new ViewDescriptorSequence(testObject)); diff --git a/src/vs/workbench/services/views/test/browser/viewDescriptorService.test.ts b/src/vs/workbench/services/views/test/browser/viewDescriptorService.test.ts index ffe3b54ec19..11312c8d62d 100644 --- a/src/vs/workbench/services/views/test/browser/viewDescriptorService.test.ts +++ b/src/vs/workbench/services/views/test/browser/viewDescriptorService.test.ts @@ -15,8 +15,8 @@ import { ContextKeyService } from 'vs/platform/contextkey/browser/contextKeyServ import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; const ViewsRegistry = Registry.as(ViewContainerExtensions.ViewsRegistry); -const sidebarContainer = Registry.as(ViewContainerExtensions.ViewContainersRegistry).registerViewContainer({ id: 'testSidebar', title: { value: 'test', original: 'test' }, ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); -const panelContainer = Registry.as(ViewContainerExtensions.ViewContainersRegistry).registerViewContainer({ id: 'testPanel', title: { value: 'test', original: 'test' }, ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Panel); +const sidebarContainer = Registry.as(ViewContainerExtensions.ViewContainersRegistry).registerViewContainer({ id: 'testSidebar', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); +const panelContainer = Registry.as(ViewContainerExtensions.ViewContainersRegistry).registerViewContainer({ id: 'testPanel', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Panel); suite('ViewDescriptorService', () => { diff --git a/src/vs/workbench/test/browser/api/mainThreadTreeViews.test.ts b/src/vs/workbench/test/browser/api/mainThreadTreeViews.test.ts index ee44e42f2da..6b8365ec3bf 100644 --- a/src/vs/workbench/test/browser/api/mainThreadTreeViews.test.ts +++ b/src/vs/workbench/test/browser/api/mainThreadTreeViews.test.ts @@ -48,7 +48,7 @@ suite('MainThreadHostTreeView', function () { const instantiationService: TestInstantiationService = workbenchInstantiationService(); const viewDescriptorService = instantiationService.createInstance(ViewDescriptorService); instantiationService.stub(IViewDescriptorService, viewDescriptorService); - container = Registry.as(Extensions.ViewContainersRegistry).registerViewContainer({ id: 'testContainer', title: { value: 'test', original: 'test' }, ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); + container = Registry.as(Extensions.ViewContainersRegistry).registerViewContainer({ id: 'testContainer', title: 'test', ctorDescriptor: new SyncDescriptor({}) }, ViewContainerLocation.Sidebar); const viewDescriptor: ITreeViewDescriptor = { id: testTreeViewId, ctorDescriptor: null!,