From 33bfb0b078401df9cd5484237f25118802588e86 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Wed, 1 Apr 2026 17:32:49 +0200 Subject: [PATCH 1/2] sessions - hide some menu and commands that do not apply --- .../workbench/browser/actions/helpActions.ts | 9 +++-- .../browser/actions/layoutActions.ts | 34 ++++++++++-------- .../browser/actions/windowActions.ts | 9 +++-- .../browser/actions/workspaceActions.ts | 36 +++++++++---------- .../parts/activitybar/activitybarPart.ts | 12 ++++--- .../parts/editor/editor.contribution.ts | 7 ++-- .../debug/browser/debug.contribution.ts | 5 +-- .../browser/actions/expandAbbreviation.ts | 4 ++- .../browser/extensions.contribution.ts | 5 +-- .../contrib/remote/browser/remoteIndicator.ts | 5 +-- .../search/browser/searchActionsFind.ts | 5 ++- .../search/browser/searchActionsNav.ts | 5 ++- .../browser/userDataProfile.ts | 6 ++-- .../common/newFile.contribution.ts | 5 ++- 14 files changed, 90 insertions(+), 57 deletions(-) diff --git a/src/vs/workbench/browser/actions/helpActions.ts b/src/vs/workbench/browser/actions/helpActions.ts index 7e4fb7b62fd90..28b79f1dae5ce 100644 --- a/src/vs/workbench/browser/actions/helpActions.ts +++ b/src/vs/workbench/browser/actions/helpActions.ts @@ -17,6 +17,7 @@ import { KeybindingWeight } from '../../../platform/keybinding/common/keybinding import { Categories } from '../../../platform/action/common/actionCommonCategories.js'; import { ICommandService } from '../../../platform/commands/common/commands.js'; import { ContextKeyExpr } from '../../../platform/contextkey/common/contextkey.js'; +import { IsSessionsWindowContext } from '../../common/contextkeys.js'; class KeybindingsReferenceAction extends Action2 { @@ -319,10 +320,12 @@ class GetStartedWithAccessibilityFeatures extends Action2 { title: localize2('getStartedWithAccessibilityFeatures', 'Get Started with Accessibility Features'), category: Categories.Help, f1: true, + precondition: IsSessionsWindowContext.negate(), menu: { id: MenuId.MenubarHelpMenu, group: '1_welcome', - order: 6 + order: 6, + when: IsSessionsWindowContext.negate() } }); } @@ -341,7 +344,7 @@ class AskVSCodeCopilot extends Action2 { title: localize2('askVScode', 'Ask @vscode'), category: Categories.Help, f1: true, - precondition: ContextKeyExpr.equals('chatSetupHidden', false) + precondition: ContextKeyExpr.and(ContextKeyExpr.equals('chatSetupHidden', false), IsSessionsWindowContext.negate()) }); } @@ -359,7 +362,7 @@ MenuRegistry.appendMenuItem(MenuId.MenubarHelpMenu, { }, order: 7, group: '1_welcome', - when: ContextKeyExpr.equals('chatSetupHidden', false) + when: ContextKeyExpr.and(ContextKeyExpr.equals('chatSetupHidden', false), IsSessionsWindowContext.negate()) }); // --- Actions Registration diff --git a/src/vs/workbench/browser/actions/layoutActions.ts b/src/vs/workbench/browser/actions/layoutActions.ts index fea736cad0351..86f783cefa4c0 100644 --- a/src/vs/workbench/browser/actions/layoutActions.ts +++ b/src/vs/workbench/browser/actions/layoutActions.ts @@ -23,7 +23,7 @@ import { IPaneCompositePartService } from '../../services/panecomposite/browser/ import { ToggleAuxiliaryBarAction } from '../parts/auxiliarybar/auxiliaryBarActions.js'; import { TogglePanelAction } from '../parts/panel/panelActions.js'; import { ICommandService } from '../../../platform/commands/common/commands.js'; -import { AuxiliaryBarVisibleContext, PanelAlignmentContext, PanelVisibleContext, SideBarVisibleContext, FocusedViewContext, InEditorZenModeContext, IsMainEditorCenteredLayoutContext, MainEditorAreaVisibleContext, IsMainWindowFullscreenContext, PanelPositionContext, IsAuxiliaryWindowFocusedContext, TitleBarStyleContext, IsAuxiliaryWindowContext } from '../../common/contextkeys.js'; +import { AuxiliaryBarVisibleContext, PanelAlignmentContext, PanelVisibleContext, SideBarVisibleContext, FocusedViewContext, InEditorZenModeContext, IsMainEditorCenteredLayoutContext, MainEditorAreaVisibleContext, IsMainWindowFullscreenContext, PanelPositionContext, IsAuxiliaryWindowFocusedContext, IsSessionsWindowContext, TitleBarStyleContext, IsAuxiliaryWindowContext } from '../../common/contextkeys.js'; import { Codicon } from '../../../base/common/codicons.js'; import { ThemeIcon } from '../../../base/common/themables.js'; import { DisposableStore } from '../../../base/common/lifecycle.js'; @@ -151,7 +151,8 @@ export class ToggleSidebarPositionAction extends Action2 { id: ToggleSidebarPositionAction.ID, title: localize2('toggleSidebarPosition', "Toggle Primary Side Bar Position"), category: Categories.View, - f1: true + f1: true, + precondition: IsSessionsWindowContext.negate() }); } @@ -233,7 +234,7 @@ MenuRegistry.appendMenuItem(MenuId.MenubarAppearanceMenu, { id: ToggleSidebarPositionAction.ID, title: localize({ key: 'miMoveSidebarRight', comment: ['&& denotes a mnemonic'] }, "&&Move Primary Side Bar Right") }, - when: ContextKeyExpr.notEquals('config.workbench.sideBar.location', 'right'), + when: ContextKeyExpr.and(ContextKeyExpr.notEquals('config.workbench.sideBar.location', 'right'), IsSessionsWindowContext.negate()), order: 2 }); @@ -243,7 +244,7 @@ MenuRegistry.appendMenuItem(MenuId.MenubarAppearanceMenu, { id: ToggleSidebarPositionAction.ID, title: localize({ key: 'miMoveSidebarLeft', comment: ['&& denotes a mnemonic'] }, "&&Move Primary Side Bar Left") }, - when: ContextKeyExpr.equals('config.workbench.sideBar.location', 'right'), + when: ContextKeyExpr.and(ContextKeyExpr.equals('config.workbench.sideBar.location', 'right'), IsSessionsWindowContext.negate()), order: 2 }); @@ -404,11 +405,13 @@ export class ToggleStatusbarVisibilityAction extends Action2 { }, category: Categories.View, f1: true, + precondition: IsSessionsWindowContext.negate(), toggled: ContextKeyExpr.equals('config.workbench.statusBar.visible', true), menu: [{ id: MenuId.MenubarAppearanceMenu, group: '2_workbench_layout', - order: 3 + order: 3, + when: IsSessionsWindowContext.negate() }] }); } @@ -435,7 +438,7 @@ abstract class AbstractSetShowTabsAction extends Action2 { id, title, category: Categories.View, - precondition, + precondition: ContextKeyExpr.and(precondition, IsSessionsWindowContext.negate()), metadata: description ? { description } : undefined, f1: true }); @@ -537,7 +540,7 @@ MenuRegistry.appendMenuItem(MenuId.MenubarAppearanceMenu, { title: localize('tabBar', "Tab Bar"), group: '3_workbench_layout_move', order: 10, - when: InEditorZenModeContext.negate() + when: ContextKeyExpr.and(InEditorZenModeContext.negate(), IsSessionsWindowContext.negate()) }); MenuRegistry.appendMenuItem(MenuId.MenubarAppearanceMenu, { @@ -545,7 +548,7 @@ MenuRegistry.appendMenuItem(MenuId.MenubarAppearanceMenu, { title: localize('tabBar', "Tab Bar"), group: '3_workbench_layout_move', order: 10, - when: InEditorZenModeContext + when: ContextKeyExpr.and(InEditorZenModeContext, IsSessionsWindowContext.negate()) }); // --- Show Editor Actions in Title Bar @@ -559,7 +562,7 @@ export class EditorActionsTitleBarAction extends Action2 { id: EditorActionsTitleBarAction.ID, title: localize2('moveEditorActionsToTitleBar', "Move Editor Actions to Title Bar"), category: Categories.View, - precondition: ContextKeyExpr.equals(`config.${LayoutSettings.EDITOR_ACTIONS_LOCATION}`, EditorActionsLocation.TITLEBAR).negate(), + precondition: ContextKeyExpr.and(ContextKeyExpr.equals(`config.${LayoutSettings.EDITOR_ACTIONS_LOCATION}`, EditorActionsLocation.TITLEBAR).negate(), IsSessionsWindowContext.negate()), metadata: { description: localize2('moveEditorActionsToTitleBarDescription', "Move Editor Actions from the tab bar to the title bar") }, f1: true }); @@ -586,6 +589,7 @@ export class EditorActionsDefaultAction extends Action2 { precondition: ContextKeyExpr.and( ContextKeyExpr.equals(`config.${LayoutSettings.EDITOR_ACTIONS_LOCATION}`, EditorActionsLocation.DEFAULT).negate(), ContextKeyExpr.equals(`config.${LayoutSettings.EDITOR_TABS_MODE}`, EditorTabsMode.NONE).negate(), + IsSessionsWindowContext.negate(), ), metadata: { description: localize2('moveEditorActionsToTabBarDescription', "Move Editor Actions from the title bar to the tab bar") }, f1: true @@ -610,7 +614,7 @@ export class HideEditorActionsAction extends Action2 { id: HideEditorActionsAction.ID, title: localize2('hideEditorActons', "Hide Editor Actions"), category: Categories.View, - precondition: ContextKeyExpr.equals(`config.${LayoutSettings.EDITOR_ACTIONS_LOCATION}`, EditorActionsLocation.HIDDEN).negate(), + precondition: ContextKeyExpr.and(ContextKeyExpr.equals(`config.${LayoutSettings.EDITOR_ACTIONS_LOCATION}`, EditorActionsLocation.HIDDEN).negate(), IsSessionsWindowContext.negate()), metadata: { description: localize2('hideEditorActonsDescription', "Hide Editor Actions in the tab and title bar") }, f1: true }); @@ -634,7 +638,7 @@ export class ShowEditorActionsAction extends Action2 { id: ShowEditorActionsAction.ID, title: localize2('showEditorActons', "Show Editor Actions"), category: Categories.View, - precondition: ContextKeyExpr.equals(`config.${LayoutSettings.EDITOR_ACTIONS_LOCATION}`, EditorActionsLocation.HIDDEN), + precondition: ContextKeyExpr.and(ContextKeyExpr.equals(`config.${LayoutSettings.EDITOR_ACTIONS_LOCATION}`, EditorActionsLocation.HIDDEN), IsSessionsWindowContext.negate()), metadata: { description: localize2('showEditorActonsDescription', "Make Editor Actions visible.") }, f1: true }); @@ -653,7 +657,8 @@ MenuRegistry.appendMenuItem(MenuId.MenubarAppearanceMenu, { submenu: MenuId.EditorActionsPositionSubmenu, title: localize('editorActionsPosition', "Editor Actions Position"), group: '3_workbench_layout_move', - order: 11 + order: 11, + when: IsSessionsWindowContext.negate() }); // --- Configure Tabs Layout @@ -734,7 +739,7 @@ registerAction2(class extends Action2 { ...localize2('toggleZenMode', "Toggle Zen Mode"), mnemonicTitle: localize({ key: 'miToggleZenMode', comment: ['&& denotes a mnemonic'] }, "Zen Mode"), }, - precondition: IsAuxiliaryWindowFocusedContext.toNegated(), + precondition: ContextKeyExpr.and(IsAuxiliaryWindowFocusedContext.toNegated(), IsSessionsWindowContext.negate()), category: Categories.View, f1: true, keybinding: { @@ -745,7 +750,8 @@ registerAction2(class extends Action2 { menu: [{ id: MenuId.MenubarAppearanceMenu, group: '1_toggle_view', - order: 2 + order: 2, + when: IsSessionsWindowContext.negate() }] }); } diff --git a/src/vs/workbench/browser/actions/windowActions.ts b/src/vs/workbench/browser/actions/windowActions.ts index 9e9423f8e4ef8..7c225ba3573d4 100644 --- a/src/vs/workbench/browser/actions/windowActions.ts +++ b/src/vs/workbench/browser/actions/windowActions.ts @@ -8,7 +8,7 @@ import { IWindowOpenable } from '../../../platform/window/common/window.js'; import { IDialogService } from '../../../platform/dialogs/common/dialogs.js'; import { MenuRegistry, MenuId, Action2, registerAction2 } from '../../../platform/actions/common/actions.js'; import { KeyChord, KeyCode, KeyMod } from '../../../base/common/keyCodes.js'; -import { IsMainWindowFullscreenContext } from '../../common/contextkeys.js'; +import { IsMainWindowFullscreenContext, IsSessionsWindowContext } from '../../common/contextkeys.js'; import { IsMacNativeContext, IsDevelopmentContext, IsWebContext, IsIOSContext } from '../../../platform/contextkey/common/contextkeys.js'; import { Categories } from '../../../platform/action/common/actionCommonCategories.js'; import { KeybindingsRegistry, KeybindingWeight } from '../../../platform/keybinding/common/keybindingsRegistry.js'; @@ -421,6 +421,7 @@ class NewWindowAction extends Action2 { mnemonicTitle: localize({ key: 'miNewWindow', comment: ['&& denotes a mnemonic'] }, "New &&Window"), }, f1: true, + precondition: IsSessionsWindowContext.negate(), keybinding: { weight: KeybindingWeight.WorkbenchContrib, primary: isWeb ? (isWindows ? KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.Shift | KeyCode.KeyN) : KeyMod.CtrlCmd | KeyMod.Alt | KeyMod.Shift | KeyCode.KeyN) : KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KeyN, @@ -429,7 +430,8 @@ class NewWindowAction extends Action2 { menu: { id: MenuId.MenubarFileMenu, group: '1_new', - order: 3 + order: 3, + when: IsSessionsWindowContext.negate() } }); } @@ -516,5 +518,6 @@ MenuRegistry.appendMenuItem(MenuId.MenubarFileMenu, { title: localize({ key: 'miOpenRecent', comment: ['&& denotes a mnemonic'] }, "Open &&Recent"), submenu: MenuId.MenubarRecentMenu, group: '2_open', - order: 4 + order: 4, + when: IsSessionsWindowContext.negate() }); diff --git a/src/vs/workbench/browser/actions/workspaceActions.ts b/src/vs/workbench/browser/actions/workspaceActions.ts index 96861a697c169..d722b697988af 100644 --- a/src/vs/workbench/browser/actions/workspaceActions.ts +++ b/src/vs/workbench/browser/actions/workspaceActions.ts @@ -12,7 +12,7 @@ import { ICommandService } from '../../../platform/commands/common/commands.js'; import { ADD_ROOT_FOLDER_COMMAND_ID, ADD_ROOT_FOLDER_LABEL, PICK_WORKSPACE_FOLDER_COMMAND_ID, SET_ROOT_FOLDER_COMMAND_ID } from './workspaceCommands.js'; import { IFileDialogService } from '../../../platform/dialogs/common/dialogs.js'; import { MenuRegistry, MenuId, Action2, registerAction2 } from '../../../platform/actions/common/actions.js'; -import { EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, OpenFolderWorkspaceSupportContext, WorkbenchStateContext, WorkspaceFolderCountContext } from '../../common/contextkeys.js'; +import { EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, IsSessionsWindowContext, OpenFolderWorkspaceSupportContext, WorkbenchStateContext, WorkspaceFolderCountContext } from '../../common/contextkeys.js'; import { ServicesAccessor } from '../../../platform/instantiation/common/instantiation.js'; import { IHostService } from '../../services/host/browser/host.js'; import { KeyChord, KeyCode, KeyMod } from '../../../base/common/keyCodes.js'; @@ -61,7 +61,7 @@ export class OpenFolderAction extends Action2 { title: localize2('openFolder', 'Open Folder...'), category: Categories.File, f1: true, - precondition: OpenFolderWorkspaceSupportContext, + precondition: ContextKeyExpr.and(OpenFolderWorkspaceSupportContext, IsSessionsWindowContext.negate()), keybinding: { weight: KeybindingWeight.WorkbenchContrib, primary: undefined, @@ -97,7 +97,7 @@ export class OpenFolderViaWorkspaceAction extends Action2 { title: localize2('openFolder', 'Open Folder...'), category: Categories.File, f1: true, - precondition: ContextKeyExpr.and(OpenFolderWorkspaceSupportContext.toNegated(), WorkbenchStateContext.isEqualTo('workspace')), + precondition: ContextKeyExpr.and(OpenFolderWorkspaceSupportContext.toNegated(), WorkbenchStateContext.isEqualTo('workspace'), IsSessionsWindowContext.negate()), keybinding: { weight: KeybindingWeight.WorkbenchContrib, primary: KeyMod.CtrlCmd | KeyCode.KeyO @@ -123,7 +123,7 @@ export class OpenFileFolderAction extends Action2 { title: OpenFileFolderAction.LABEL, category: Categories.File, f1: true, - precondition: ContextKeyExpr.and(IsMacNativeContext, OpenFolderWorkspaceSupportContext), + precondition: ContextKeyExpr.and(IsMacNativeContext, OpenFolderWorkspaceSupportContext, IsSessionsWindowContext.negate()), keybinding: { weight: KeybindingWeight.WorkbenchContrib, primary: KeyMod.CtrlCmd | KeyCode.KeyO @@ -148,7 +148,7 @@ class OpenWorkspaceAction extends Action2 { title: localize2('openWorkspaceAction', 'Open Workspace from File...'), category: Categories.File, f1: true, - precondition: EnterMultiRootWorkspaceSupportContext + precondition: ContextKeyExpr.and(EnterMultiRootWorkspaceSupportContext, IsSessionsWindowContext.negate()) }); } @@ -169,7 +169,7 @@ class CloseWorkspaceAction extends Action2 { title: localize2('closeWorkspace', 'Close Workspace'), category: workspacesCategory, f1: true, - precondition: ContextKeyExpr.and(WorkbenchStateContext.notEqualsTo('empty'), EmptyWorkspaceSupportContext), + precondition: ContextKeyExpr.and(WorkbenchStateContext.notEqualsTo('empty'), EmptyWorkspaceSupportContext, IsSessionsWindowContext.negate()), keybinding: { weight: KeybindingWeight.WorkbenchContrib, primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyCode.KeyF) @@ -220,7 +220,7 @@ export class AddRootFolderAction extends Action2 { title: ADD_ROOT_FOLDER_LABEL, category: workspacesCategory, f1: true, - precondition: ContextKeyExpr.or(EnterMultiRootWorkspaceSupportContext, WorkbenchStateContext.isEqualTo('workspace')) + precondition: ContextKeyExpr.and(ContextKeyExpr.or(EnterMultiRootWorkspaceSupportContext, WorkbenchStateContext.isEqualTo('workspace')), IsSessionsWindowContext.negate()) }); } @@ -266,7 +266,7 @@ class SaveWorkspaceAsAction extends Action2 { title: localize2('saveWorkspaceAsAction', 'Save Workspace As...'), category: workspacesCategory, f1: true, - precondition: EnterMultiRootWorkspaceSupportContext + precondition: ContextKeyExpr.and(EnterMultiRootWorkspaceSupportContext, IsSessionsWindowContext.negate()) }); } @@ -299,7 +299,7 @@ class DuplicateWorkspaceInNewWindowAction extends Action2 { title: localize2('duplicateWorkspaceInNewWindow', 'Duplicate As Workspace in New Window'), category: workspacesCategory, f1: true, - precondition: EnterMultiRootWorkspaceSupportContext + precondition: ContextKeyExpr.and(EnterMultiRootWorkspaceSupportContext, IsSessionsWindowContext.negate()) }); } @@ -353,7 +353,7 @@ MenuRegistry.appendMenuItem(MenuId.MenubarFileMenu, { title: localize({ key: 'miOpenFolder', comment: ['&& denotes a mnemonic'] }, "Open &&Folder...") }, order: 2, - when: OpenFolderWorkspaceSupportContext + when: ContextKeyExpr.and(OpenFolderWorkspaceSupportContext, IsSessionsWindowContext.negate()) }); MenuRegistry.appendMenuItem(MenuId.MenubarFileMenu, { @@ -363,7 +363,7 @@ MenuRegistry.appendMenuItem(MenuId.MenubarFileMenu, { title: localize({ key: 'miOpenFolder', comment: ['&& denotes a mnemonic'] }, "Open &&Folder...") }, order: 2, - when: ContextKeyExpr.and(OpenFolderWorkspaceSupportContext.toNegated(), WorkbenchStateContext.isEqualTo('workspace')) + when: ContextKeyExpr.and(OpenFolderWorkspaceSupportContext.toNegated(), WorkbenchStateContext.isEqualTo('workspace'), IsSessionsWindowContext.negate()) }); MenuRegistry.appendMenuItem(MenuId.MenubarFileMenu, { @@ -373,7 +373,7 @@ MenuRegistry.appendMenuItem(MenuId.MenubarFileMenu, { title: localize({ key: 'miOpen', comment: ['&& denotes a mnemonic'] }, "&&Open...") }, order: 1, - when: ContextKeyExpr.and(IsMacNativeContext, OpenFolderWorkspaceSupportContext) + when: ContextKeyExpr.and(IsMacNativeContext, OpenFolderWorkspaceSupportContext, IsSessionsWindowContext.negate()) }); MenuRegistry.appendMenuItem(MenuId.MenubarFileMenu, { @@ -383,7 +383,7 @@ MenuRegistry.appendMenuItem(MenuId.MenubarFileMenu, { title: localize({ key: 'miOpenWorkspace', comment: ['&& denotes a mnemonic'] }, "Open Wor&&kspace from File...") }, order: 3, - when: EnterMultiRootWorkspaceSupportContext + when: ContextKeyExpr.and(EnterMultiRootWorkspaceSupportContext, IsSessionsWindowContext.negate()) }); MenuRegistry.appendMenuItem(MenuId.MenubarFileMenu, { @@ -392,7 +392,7 @@ MenuRegistry.appendMenuItem(MenuId.MenubarFileMenu, { id: ADD_ROOT_FOLDER_COMMAND_ID, title: localize({ key: 'miAddFolderToWorkspace', comment: ['&& denotes a mnemonic'] }, "A&&dd Folder to Workspace...") }, - when: ContextKeyExpr.or(EnterMultiRootWorkspaceSupportContext, WorkbenchStateContext.isEqualTo('workspace')), + when: ContextKeyExpr.and(ContextKeyExpr.or(EnterMultiRootWorkspaceSupportContext, WorkbenchStateContext.isEqualTo('workspace')), IsSessionsWindowContext.negate()), order: 1 }); @@ -403,7 +403,7 @@ MenuRegistry.appendMenuItem(MenuId.MenubarFileMenu, { title: localize('miSaveWorkspaceAs', "Save Workspace As...") }, order: 2, - when: EnterMultiRootWorkspaceSupportContext + when: ContextKeyExpr.and(EnterMultiRootWorkspaceSupportContext, IsSessionsWindowContext.negate()) }); MenuRegistry.appendMenuItem(MenuId.MenubarFileMenu, { @@ -413,7 +413,7 @@ MenuRegistry.appendMenuItem(MenuId.MenubarFileMenu, { title: localize('duplicateWorkspace', "Duplicate Workspace") }, order: 3, - when: EnterMultiRootWorkspaceSupportContext + when: ContextKeyExpr.and(EnterMultiRootWorkspaceSupportContext, IsSessionsWindowContext.negate()) }); MenuRegistry.appendMenuItem(MenuId.MenubarFileMenu, { @@ -423,7 +423,7 @@ MenuRegistry.appendMenuItem(MenuId.MenubarFileMenu, { title: localize({ key: 'miCloseFolder', comment: ['&& denotes a mnemonic'] }, "Close &&Folder") }, order: 3, - when: ContextKeyExpr.and(WorkbenchStateContext.isEqualTo('folder'), EmptyWorkspaceSupportContext) + when: ContextKeyExpr.and(WorkbenchStateContext.isEqualTo('folder'), EmptyWorkspaceSupportContext, IsSessionsWindowContext.negate()) }); MenuRegistry.appendMenuItem(MenuId.MenubarFileMenu, { @@ -433,5 +433,5 @@ MenuRegistry.appendMenuItem(MenuId.MenubarFileMenu, { title: localize({ key: 'miCloseWorkspace', comment: ['&& denotes a mnemonic'] }, "Close &&Workspace") }, order: 3, - when: ContextKeyExpr.and(WorkbenchStateContext.isEqualTo('workspace'), EmptyWorkspaceSupportContext) + when: ContextKeyExpr.and(WorkbenchStateContext.isEqualTo('workspace'), EmptyWorkspaceSupportContext, IsSessionsWindowContext.negate()) }); diff --git a/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts b/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts index 0307cab0e03bd..86c8b18470627 100644 --- a/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts +++ b/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts @@ -31,6 +31,7 @@ import { GlobalCompositeBar } from '../globalCompositeBar.js'; import { IStorageService } from '../../../../platform/storage/common/storage.js'; import { Action2, IMenuService, MenuId, MenuRegistry, registerAction2 } from '../../../../platform/actions/common/actions.js'; import { ContextKeyExpr, IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { IsSessionsWindowContext } from '../../../common/contextkeys.js'; import { Categories } from '../../../../platform/action/common/actionCommonCategories.js'; import { getContextMenuActions } from '../../../../platform/actions/browser/menuEntryActionViewItem.js'; import { IViewDescriptorService, ViewContainerLocation, ViewContainerLocationToString } from '../../../common/views.js'; @@ -463,7 +464,7 @@ registerAction2(class extends Action2 { order: 1 }, { id: MenuId.CommandPalette, - when: ContextKeyExpr.notEquals(`config.${LayoutSettings.ACTIVITY_BAR_LOCATION}`, ActivityBarPosition.DEFAULT), + when: ContextKeyExpr.and(ContextKeyExpr.notEquals(`config.${LayoutSettings.ACTIVITY_BAR_LOCATION}`, ActivityBarPosition.DEFAULT), IsSessionsWindowContext.negate()), }] }); } @@ -489,7 +490,7 @@ registerAction2(class extends Action2 { order: 2 }, { id: MenuId.CommandPalette, - when: ContextKeyExpr.notEquals(`config.${LayoutSettings.ACTIVITY_BAR_LOCATION}`, ActivityBarPosition.TOP), + when: ContextKeyExpr.and(ContextKeyExpr.notEquals(`config.${LayoutSettings.ACTIVITY_BAR_LOCATION}`, ActivityBarPosition.TOP), IsSessionsWindowContext.negate()), }] }); } @@ -515,7 +516,7 @@ registerAction2(class extends Action2 { order: 3 }, { id: MenuId.CommandPalette, - when: ContextKeyExpr.notEquals(`config.${LayoutSettings.ACTIVITY_BAR_LOCATION}`, ActivityBarPosition.BOTTOM), + when: ContextKeyExpr.and(ContextKeyExpr.notEquals(`config.${LayoutSettings.ACTIVITY_BAR_LOCATION}`, ActivityBarPosition.BOTTOM), IsSessionsWindowContext.negate()), }] }); } @@ -541,7 +542,7 @@ registerAction2(class extends Action2 { order: 4 }, { id: MenuId.CommandPalette, - when: ContextKeyExpr.notEquals(`config.${LayoutSettings.ACTIVITY_BAR_LOCATION}`, ActivityBarPosition.HIDDEN), + when: ContextKeyExpr.and(ContextKeyExpr.notEquals(`config.${LayoutSettings.ACTIVITY_BAR_LOCATION}`, ActivityBarPosition.HIDDEN), IsSessionsWindowContext.negate()), }] }); } @@ -555,7 +556,8 @@ MenuRegistry.appendMenuItem(MenuId.MenubarAppearanceMenu, { submenu: MenuId.ActivityBarPositionMenu, title: localize('positionActivituBar', "Activity Bar Position"), group: '3_workbench_layout_move', - order: 2 + order: 2, + when: IsSessionsWindowContext.negate() }); MenuRegistry.appendMenuItem(MenuId.ViewContainerTitleContext, { diff --git a/src/vs/workbench/browser/parts/editor/editor.contribution.ts b/src/vs/workbench/browser/parts/editor/editor.contribution.ts index ffadc12ea9668..7d24435fc9ee5 100644 --- a/src/vs/workbench/browser/parts/editor/editor.contribution.ts +++ b/src/vs/workbench/browser/parts/editor/editor.contribution.ts @@ -11,7 +11,8 @@ import { TextCompareEditorActiveContext, ActiveEditorPinnedContext, EditorGroupEditorsCountContext, ActiveEditorStickyContext, ActiveEditorAvailableEditorIdsContext, EditorPartMultipleEditorGroupsContext, ActiveEditorDirtyContext, ActiveEditorGroupLockedContext, ActiveEditorCanSplitInGroupContext, SideBySideEditorActiveContext, EditorTabsVisibleContext, ActiveEditorLastInGroupContext, EditorPartMaximizedEditorGroupContext, MultipleEditorGroupsContext, InEditorZenModeContext, - IsAuxiliaryWindowContext, ActiveCompareEditorCanSwapContext, MultipleEditorsSelectedInGroupContext, SplitEditorsVertically + IsAuxiliaryWindowContext, ActiveCompareEditorCanSwapContext, MultipleEditorsSelectedInGroupContext, SplitEditorsVertically, + IsSessionsWindowContext } from '../../../common/contextkeys.js'; import { SideBySideEditorInput, SideBySideEditorInputSerializer } from '../../../common/editor/sideBySideEditorInput.js'; import { TextResourceEditor } from './textResourceEditor.js'; @@ -689,6 +690,7 @@ MenuRegistry.appendMenuItem(MenuId.MenubarFileMenu, { submenu: MenuId.MenubarShare, group: '45_share', order: 1, + when: IsSessionsWindowContext.negate() }); // Layout menu @@ -696,7 +698,8 @@ MenuRegistry.appendMenuItem(MenuId.MenubarViewMenu, { group: '2_appearance', title: localize({ key: 'miEditorLayout', comment: ['&& denotes a mnemonic'] }, "Editor &&Layout"), submenu: MenuId.MenubarLayoutMenu, - order: 2 + order: 2, + when: IsSessionsWindowContext.negate() }); MenuRegistry.appendMenuItem(MenuId.MenubarLayoutMenu, { diff --git a/src/vs/workbench/contrib/debug/browser/debug.contribution.ts b/src/vs/workbench/contrib/debug/browser/debug.contribution.ts index 7b2cbce78b27e..866c7bc8d3380 100644 --- a/src/vs/workbench/contrib/debug/browser/debug.contribution.ts +++ b/src/vs/workbench/contrib/debug/browser/debug.contribution.ts @@ -21,7 +21,7 @@ import { IQuickAccessRegistry, Extensions as QuickAccessExtensions } from '../.. import { Registry } from '../../../../platform/registry/common/platform.js'; import { EditorPaneDescriptor, IEditorPaneRegistry } from '../../../browser/editor.js'; import { ViewPaneContainer } from '../../../browser/parts/views/viewPaneContainer.js'; -import { FocusedViewContext } from '../../../common/contextkeys.js'; +import { FocusedViewContext, IsSessionsWindowContext } from '../../../common/contextkeys.js'; import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions, WorkbenchPhase, registerWorkbenchContribution2 } from '../../../common/contributions.js'; import { EditorExtensions } from '../../../common/editor.js'; import { IViewContainersRegistry, IViewsRegistry, ViewContainer, ViewContainerLocation, Extensions as ViewExtensions } from '../../../common/views.js'; @@ -265,7 +265,8 @@ MenuRegistry.appendMenuItem(MenuId.MenubarMainMenu, { ...nls.localize2('runMenu', "Run"), mnemonicTitle: nls.localize({ key: 'mRun', comment: ['&& denotes a mnemonic'] }, "&&Run") }, - order: 6 + order: 6, + when: IsSessionsWindowContext.negate() }); MenuRegistry.appendMenuItem(MenuId.MenubarDebugMenu, { diff --git a/src/vs/workbench/contrib/emmet/browser/actions/expandAbbreviation.ts b/src/vs/workbench/contrib/emmet/browser/actions/expandAbbreviation.ts index 59e1c903fdd7b..ba98845660f93 100644 --- a/src/vs/workbench/contrib/emmet/browser/actions/expandAbbreviation.ts +++ b/src/vs/workbench/contrib/emmet/browser/actions/expandAbbreviation.ts @@ -8,6 +8,7 @@ import { registerEditorAction } from '../../../../../editor/browser/editorExtens import { EditorContextKeys } from '../../../../../editor/common/editorContextKeys.js'; import { KeyCode } from '../../../../../base/common/keyCodes.js'; import { ContextKeyExpr } from '../../../../../platform/contextkey/common/contextkey.js'; +import { IsSessionsWindowContext } from '../../../../common/contextkeys.js'; import { KeybindingWeight } from '../../../../../platform/keybinding/common/keybindingsRegistry.js'; import { MenuId } from '../../../../../platform/actions/common/actions.js'; @@ -32,7 +33,8 @@ class ExpandAbbreviationAction extends EmmetEditorAction { menuId: MenuId.MenubarEditMenu, group: '5_insert', title: nls.localize({ key: 'miEmmetExpandAbbreviation', comment: ['&& denotes a mnemonic'] }, "Emmet: E&&xpand Abbreviation"), - order: 3 + order: 3, + when: IsSessionsWindowContext.negate() } }); diff --git a/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts b/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts index 6e2b340903c4b..69bec710f502a 100644 --- a/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts +++ b/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts @@ -47,7 +47,7 @@ import { IUriIdentityService } from '../../../../platform/uriIdentity/common/uri import { IUserDataProfilesService } from '../../../../platform/userDataProfile/common/userDataProfile.js'; import { EditorPaneDescriptor, IEditorPaneRegistry } from '../../../browser/editor.js'; import { Extensions as ConfigurationMigrationExtensions, IConfigurationMigrationRegistry } from '../../../common/configuration.js'; -import { ResourceContextKey, WorkbenchStateContext } from '../../../common/contextkeys.js'; +import { IsSessionsWindowContext, ResourceContextKey, WorkbenchStateContext } from '../../../common/contextkeys.js'; import { IWorkbenchContribution, IWorkbenchContributionsRegistry, registerWorkbenchContribution2, Extensions as WorkbenchExtensions, WorkbenchPhase } from '../../../common/contributions.js'; import { EditorExtensions } from '../../../common/editor.js'; import { IViewContainersRegistry, Extensions as ViewContainerExtensions, ViewContainerLocation } from '../../../common/views.js'; @@ -623,7 +623,8 @@ class ExtensionsContributions extends Disposable implements IWorkbenchContributi title: localize({ key: 'miPreferencesExtensions', comment: ['&& denotes a mnemonic'] }, "&&Extensions") }, group: '2_configuration', - order: 3 + order: 3, + when: IsSessionsWindowContext.negate() })); this._register(MenuRegistry.appendMenuItem(MenuId.GlobalActivity, { command: { diff --git a/src/vs/workbench/contrib/remote/browser/remoteIndicator.ts b/src/vs/workbench/contrib/remote/browser/remoteIndicator.ts index 04ee77ccc8d80..65d90cfd1848d 100644 --- a/src/vs/workbench/contrib/remote/browser/remoteIndicator.ts +++ b/src/vs/workbench/contrib/remote/browser/remoteIndicator.ts @@ -33,7 +33,7 @@ import { EXTENSION_INSTALL_SKIP_WALKTHROUGH_CONTEXT, IExtensionGalleryService, I import { IExtensionsWorkbenchService, LIST_WORKSPACE_UNSUPPORTED_EXTENSIONS_COMMAND_ID } from '../../extensions/common/extensions.js'; import { ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; import { IMarkdownString, MarkdownString } from '../../../../base/common/htmlContent.js'; -import { RemoteNameContext, VirtualWorkspaceContext } from '../../../common/contextkeys.js'; +import { IsSessionsWindowContext, RemoteNameContext, VirtualWorkspaceContext } from '../../../common/contextkeys.js'; import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; import { WorkbenchActionExecutedClassification, WorkbenchActionExecutedEvent } from '../../../../base/common/actions.js'; import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; @@ -213,7 +213,7 @@ export class RemoteStatusIndicator extends Disposable implements IWorkbenchContr category, title: nls.localize2('remote.close', "Close Remote Connection"), f1: true, - precondition: ContextKeyExpr.or(RemoteNameContext, VirtualWorkspaceContext) + precondition: ContextKeyExpr.and(ContextKeyExpr.or(RemoteNameContext, VirtualWorkspaceContext), IsSessionsWindowContext.negate()) }); } run = () => that.hostService.openWindow({ forceReuseWindow: true, remoteAuthority: null }); @@ -225,6 +225,7 @@ export class RemoteStatusIndicator extends Disposable implements IWorkbenchContr id: RemoteStatusIndicator.CLOSE_REMOTE_COMMAND_ID, title: nls.localize({ key: 'miCloseRemote', comment: ['&& denotes a mnemonic'] }, "Close Re&&mote Connection") }, + when: IsSessionsWindowContext.negate(), order: 3.5 }); } diff --git a/src/vs/workbench/contrib/search/browser/searchActionsFind.ts b/src/vs/workbench/contrib/search/browser/searchActionsFind.ts index 2453e14584354..9f99aa2b4ed16 100644 --- a/src/vs/workbench/contrib/search/browser/searchActionsFind.ts +++ b/src/vs/workbench/contrib/search/browser/searchActionsFind.ts @@ -15,6 +15,7 @@ import * as SearchEditorConstants from '../../searchEditor/browser/constants.js' import { OpenSearchEditorArgs } from '../../searchEditor/browser/searchEditor.contribution.js'; import { ISearchConfiguration, ISearchConfigurationProperties } from '../../../services/search/common/search.js'; import { URI } from '../../../../base/common/uri.js'; +import { IsSessionsWindowContext } from '../../../common/contextkeys.js'; import { ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js'; import { Action2, MenuId, registerAction2 } from '../../../../platform/actions/common/actions.js'; import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; @@ -264,8 +265,10 @@ registerAction2(class FindInFilesAction extends Action2 { id: MenuId.MenubarEditMenu, group: '4_find_global', order: 1, + when: IsSessionsWindowContext.negate(), }], - f1: true + f1: true, + precondition: IsSessionsWindowContext.negate() }); } diff --git a/src/vs/workbench/contrib/search/browser/searchActionsNav.ts b/src/vs/workbench/contrib/search/browser/searchActionsNav.ts index 97186a8398801..c0f6c5280763a 100644 --- a/src/vs/workbench/contrib/search/browser/searchActionsNav.ts +++ b/src/vs/workbench/contrib/search/browser/searchActionsNav.ts @@ -15,6 +15,7 @@ import * as SearchEditorConstants from '../../searchEditor/browser/constants.js' import { SearchEditor } from '../../searchEditor/browser/searchEditor.js'; import { SearchEditorInput } from '../../searchEditor/browser/searchEditorInput.js'; import { IEditorService } from '../../../services/editor/common/editorService.js'; +import { IsSessionsWindowContext } from '../../../common/contextkeys.js'; import { ContextKeyExpr, IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; import { assertReturnsDefined } from '../../../../base/common/types.js'; import { Action2, MenuId, registerAction2 } from '../../../../platform/actions/common/actions.js'; @@ -403,10 +404,12 @@ registerAction2(class ReplaceInFilesAction extends Action2 { }], category, f1: true, + precondition: IsSessionsWindowContext.negate(), menu: [{ id: MenuId.MenubarEditMenu, group: '4_find_global', - order: 2 + order: 2, + when: IsSessionsWindowContext.negate(), }], }); } diff --git a/src/vs/workbench/contrib/userDataProfile/browser/userDataProfile.ts b/src/vs/workbench/contrib/userDataProfile/browser/userDataProfile.ts index dfbb6b0fb95bd..c1de3497f5d57 100644 --- a/src/vs/workbench/contrib/userDataProfile/browser/userDataProfile.ts +++ b/src/vs/workbench/contrib/userDataProfile/browser/userDataProfile.ts @@ -7,6 +7,7 @@ import { Disposable, DisposableStore, IDisposable, MutableDisposable } from '../ import { isWeb } from '../../../../base/common/platform.js'; import { ServicesAccessor } from '../../../../editor/browser/editorExtensions.js'; import { localize, localize2 } from '../../../../nls.js'; +import { IsSessionsWindowContext } from '../../../common/contextkeys.js'; import { Action2, MenuId, MenuRegistry, registerAction2 } from '../../../../platform/actions/common/actions.js'; import { ContextKeyExpr, ContextKeyExpression, IContextKey, IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; import { IUserDataProfile, IUserDataProfilesService } from '../../../../platform/userDataProfile/common/userDataProfile.js'; @@ -196,7 +197,7 @@ export class UserDataProfilesWorkbenchContribution extends Disposable implements submenu: ProfilesMenu, group: '2_configuration', order: 1, - when: HAS_PROFILES_CONTEXT + when: ContextKeyExpr.and(HAS_PROFILES_CONTEXT, IsSessionsWindowContext.negate()) }); } @@ -206,6 +207,7 @@ export class UserDataProfilesWorkbenchContribution extends Disposable implements submenu: OpenProfileMenu, group: '1_new', order: 4, + when: IsSessionsWindowContext.negate() }); } @@ -375,7 +377,7 @@ export class UserDataProfilesWorkbenchContribution extends Disposable implements id: MenuId.MenubarPreferencesMenu, group: '2_configuration', order: 1, - when: HAS_PROFILES_CONTEXT.negate() + when: ContextKeyExpr.and(HAS_PROFILES_CONTEXT.negate(), IsSessionsWindowContext.negate()) }, { id: ProfilesMenu, diff --git a/src/vs/workbench/contrib/welcomeViews/common/newFile.contribution.ts b/src/vs/workbench/contrib/welcomeViews/common/newFile.contribution.ts index a92f90bc9b027..3619cc731c343 100644 --- a/src/vs/workbench/contrib/welcomeViews/common/newFile.contribution.ts +++ b/src/vs/workbench/contrib/welcomeViews/common/newFile.contribution.ts @@ -12,6 +12,7 @@ import { ILocalizedString } from '../../../../platform/action/common/action.js'; import { Action2, IMenuService, MenuId, registerAction2, IMenu, MenuRegistry, MenuItemAction } from '../../../../platform/actions/common/actions.js'; import { ICommandService } from '../../../../platform/commands/common/commands.js'; import { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { IsSessionsWindowContext } from '../../../common/contextkeys.js'; import { ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; import { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; @@ -30,6 +31,7 @@ registerAction2(class extends Action2 { title: localize2('welcome.newFile', 'New File...'), category, f1: true, + precondition: IsSessionsWindowContext.negate(), keybinding: { primary: KeyMod.Alt + KeyMod.CtrlCmd + KeyMod.WinCtrl + KeyCode.KeyN, weight: KeybindingWeight.WorkbenchContrib, @@ -37,7 +39,8 @@ registerAction2(class extends Action2 { menu: { id: MenuId.MenubarFileMenu, group: '1_new', - order: 2 + order: 2, + when: IsSessionsWindowContext.negate() } }); } From c008a7fc786fa29e5b6b6f58bcbd866ab827280e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 1 Apr 2026 15:49:43 +0000 Subject: [PATCH 2/2] sessions - add precondition to OpenRecentAction to hide from Command Palette in Sessions windows Agent-Logs-Url: https://github.com/microsoft/vscode/sessions/ef0f26b8-aae6-464e-8633-650caebae42a Co-authored-by: bpasero <900690+bpasero@users.noreply.github.com> --- src/vs/workbench/browser/actions/windowActions.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/vs/workbench/browser/actions/windowActions.ts b/src/vs/workbench/browser/actions/windowActions.ts index 7c225ba3573d4..26002cd9e986b 100644 --- a/src/vs/workbench/browser/actions/windowActions.ts +++ b/src/vs/workbench/browser/actions/windowActions.ts @@ -290,6 +290,7 @@ export class OpenRecentAction extends BaseOpenRecentAction { }, category: Categories.File, f1: true, + precondition: IsSessionsWindowContext.negate(), keybinding: { weight: KeybindingWeight.WorkbenchContrib, primary: KeyMod.CtrlCmd | KeyCode.KeyR,