Skip to content

Commit 8c6fe48

Browse files
authored
chat - improve actions in chat title menu and aux windows (#265288)
1 parent 0c72238 commit 8c6fe48

File tree

3 files changed

+37
-9
lines changed

3 files changed

+37
-9
lines changed

src/vs/platform/actions/browser/actionViewItemService.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export const IActionViewItemService = createDecorator<IActionViewItemService>('I
1717

1818

1919
export interface IActionViewItemFactory {
20-
(action: IAction, options: IActionViewItemOptions, instaService: IInstantiationService): IActionViewItem | undefined;
20+
(action: IAction, options: IActionViewItemOptions, instantiationService: IInstantiationService, windowId: number): IActionViewItem | undefined;
2121
}
2222

2323
export interface IActionViewItemService {

src/vs/platform/actions/browser/toolbar.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ export class MenuWorkbenchToolBar extends WorkbenchToolBar {
343343
@ICommandService commandService: ICommandService,
344344
@ITelemetryService telemetryService: ITelemetryService,
345345
@IActionViewItemService actionViewService: IActionViewItemService,
346-
@IInstantiationService instaService: IInstantiationService,
346+
@IInstantiationService instantiationService: IInstantiationService,
347347
) {
348348
super(container, {
349349
resetMenu: menuId,
@@ -353,11 +353,11 @@ export class MenuWorkbenchToolBar extends WorkbenchToolBar {
353353
if (!provider) {
354354
provider = options?.actionViewItemProvider;
355355
}
356-
const viewItem = provider?.(action, opts, instaService);
356+
const viewItem = provider?.(action, opts, instantiationService, getWindow(container).vscodeWindowId);
357357
if (viewItem) {
358358
return viewItem;
359359
}
360-
return createActionViewItem(instaService, action, opts);
360+
return createActionViewItem(instantiationService, action, opts);
361361
}
362362
}, menuService, contextKeyService, contextMenuService, keybindingService, commandService, telemetryService);
363363

src/vs/workbench/contrib/chat/browser/actions/chatActions.ts

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ import { clearChatEditor } from './chatClear.js';
7575
import { ILanguageModelChatSelector, ILanguageModelsService } from '../../common/languageModels.js';
7676
import { IChatResponseModel } from '../../common/chatModel.js';
7777
import { EditorContextKeys } from '../../../../../editor/common/editorContextKeys.js';
78+
import { mainWindow } from '../../../../../base/browser/window.js';
7879

7980
export const CHAT_CATEGORY = localize2('chat.category', 'Chat');
8081

@@ -956,7 +957,7 @@ export function registerChatActions() {
956957
}
957958
});
958959

959-
registerAction2(class OpenChatEditorAction extends Action2 {
960+
registerAction2(class NewChatEditorAction extends Action2 {
960961
constructor() {
961962
super({
962963
id: `workbench.action.openChat`,
@@ -968,6 +969,11 @@ export function registerChatActions() {
968969
weight: KeybindingWeight.WorkbenchContrib + 1,
969970
primary: KeyMod.CtrlCmd | KeyCode.KeyN,
970971
when: ContextKeyExpr.and(ChatContextKeys.inChatSession, ChatContextKeys.inChatEditor)
972+
},
973+
menu: {
974+
id: MenuId.ChatTitleBarMenu,
975+
group: 'b_new',
976+
order: 0
971977
}
972978
});
973979
}
@@ -978,6 +984,28 @@ export function registerChatActions() {
978984
}
979985
});
980986

987+
registerAction2(class NewChatWindowAction extends Action2 {
988+
constructor() {
989+
super({
990+
id: `workbench.action.newChatWindow`,
991+
title: localize2('interactiveSession.newChatWindow', "New Chat Window"),
992+
f1: true,
993+
category: CHAT_CATEGORY,
994+
precondition: ChatContextKeys.enabled,
995+
menu: {
996+
id: MenuId.ChatTitleBarMenu,
997+
group: 'b_new',
998+
order: 1
999+
}
1000+
});
1001+
}
1002+
1003+
async run(accessor: ServicesAccessor) {
1004+
const editorService = accessor.get(IEditorService);
1005+
await editorService.openEditor({ resource: ChatEditorInput.getNewEditorUri(), options: { pinned: true, auxiliary: { compact: true, bounds: { width: 640, height: 640 } } } satisfies IChatEditorOptions }, AUX_WINDOW_GROUP);
1006+
}
1007+
});
1008+
9811009
registerAction2(class OpenChatEditorInNewWindowAction extends Action2 {
9821010
constructor() {
9831011
super({
@@ -1553,12 +1581,11 @@ export class CopilotTitleBarMenuRendering extends Disposable implements IWorkben
15531581

15541582
constructor(
15551583
@IActionViewItemService actionViewItemService: IActionViewItemService,
1556-
@IInstantiationService instantiationService: IInstantiationService,
15571584
@IChatEntitlementService chatEntitlementService: IChatEntitlementService,
15581585
) {
15591586
super();
15601587

1561-
const disposable = actionViewItemService.register(MenuId.CommandCenter, MenuId.ChatTitleBarMenu, (action, options) => {
1588+
const disposable = actionViewItemService.register(MenuId.CommandCenter, MenuId.ChatTitleBarMenu, (action, options, instantiationService, windowId) => {
15621589
if (!(action instanceof SubmenuItemAction)) {
15631590
return undefined;
15641591
}
@@ -1574,8 +1601,9 @@ export class CopilotTitleBarMenuRendering extends Disposable implements IWorkben
15741601
const signedOut = chatEntitlementService.entitlement === ChatEntitlement.Unknown;
15751602
const free = chatEntitlementService.entitlement === ChatEntitlement.Free;
15761603

1577-
let primaryActionId = TOGGLE_CHAT_ACTION_ID;
1578-
let primaryActionTitle = localize('toggleChat', "Toggle Chat");
1604+
const isAuxiliaryWindow = windowId !== mainWindow.vscodeWindowId;
1605+
let primaryActionId = isAuxiliaryWindow ? CHAT_OPEN_ACTION_ID : TOGGLE_CHAT_ACTION_ID;
1606+
let primaryActionTitle = isAuxiliaryWindow ? localize('openChat', "Open Chat") : localize('toggleChat', "Toggle Chat");
15791607
let primaryActionIcon = Codicon.chatSparkle;
15801608
if (chatSentiment.installed && !chatSentiment.disabled) {
15811609
if (signedOut) {

0 commit comments

Comments
 (0)