From 55a8db1b31b80baa9a8840189e2a42c57ff2ebca Mon Sep 17 00:00:00 2001 From: Ladislau Szomoru <3372902+lszomoru@users.noreply.github.com> Date: Thu, 19 Mar 2026 20:53:13 +0000 Subject: [PATCH] Sessions - more changes view cleanup (#303303) * Sessions - more changes view cleanup * Pull request feedback * More changes --- .../contrib/changes/browser/changesView.contribution.ts | 4 ++-- src/vs/sessions/contrib/changes/browser/changesView.ts | 9 ++++++--- .../{toggleChangesView.ts => changesViewController.ts} | 4 ++-- 3 files changed, 10 insertions(+), 7 deletions(-) rename src/vs/sessions/contrib/changes/browser/{toggleChangesView.ts => changesViewController.ts} (97%) diff --git a/src/vs/sessions/contrib/changes/browser/changesView.contribution.ts b/src/vs/sessions/contrib/changes/browser/changesView.contribution.ts index 9da044d818d..386fd6603fc 100644 --- a/src/vs/sessions/contrib/changes/browser/changesView.contribution.ts +++ b/src/vs/sessions/contrib/changes/browser/changesView.contribution.ts @@ -12,7 +12,7 @@ import { registerWorkbenchContribution2, WorkbenchPhase } from '../../../../work import { IViewContainersRegistry, ViewContainerLocation, IViewsRegistry, Extensions as ViewContainerExtensions, WindowVisibility } from '../../../../workbench/common/views.js'; import { CHANGES_VIEW_CONTAINER_ID, CHANGES_VIEW_ID, ChangesViewPane, ChangesViewPaneContainer } from './changesView.js'; import './changesViewActions.js'; -import { ToggleChangesViewContribution } from './toggleChangesView.js'; +import { ChangesViewController } from './changesViewController.js'; const changesViewIcon = registerIcon('changes-view-icon', Codicon.gitCompare, localize2('changesViewIcon', 'View icon for the Changes view.').value); @@ -42,4 +42,4 @@ viewsRegistry.registerViews([{ windowVisibility: WindowVisibility.Sessions }], changesViewContainer); -registerWorkbenchContribution2(ToggleChangesViewContribution.ID, ToggleChangesViewContribution, WorkbenchPhase.BlockRestore); +registerWorkbenchContribution2(ChangesViewController.ID, ChangesViewController, WorkbenchPhase.BlockRestore); diff --git a/src/vs/sessions/contrib/changes/browser/changesView.ts b/src/vs/sessions/contrib/changes/browser/changesView.ts index 5cfb9a5e66f..946be8667a6 100644 --- a/src/vs/sessions/contrib/changes/browser/changesView.ts +++ b/src/vs/sessions/contrib/changes/browser/changesView.ts @@ -342,6 +342,7 @@ export class ChangesViewPane extends ViewPane { super(options, keybindingService, contextMenuService, configurationService, contextKeyService, viewDescriptorService, instantiationService, openerService, themeService, hoverService); this.viewModel = this.instantiationService.createInstance(ChangesViewModel); + this._register(this.viewModel); // Version mode this._register(bindContextKey(changesVersionModeContextKey, this.scopedContextKeyService, reader => { @@ -353,7 +354,7 @@ export class ChangesViewPane extends ViewPane { return this.viewModel.viewModeObs.read(reader); })); - // Set chatSessionType on the view's context key service so ViewTitlev menu items + // Set chatSessionType on the view's context key service so ViewTitle menu items // can use it in their `when` clauses. Update reactively when the active session // changes. this._register(bindContextKey(ChatContextKeys.agentSessionType, this.scopedContextKeyService, reader => { @@ -623,8 +624,6 @@ export class ChangesViewPane extends ViewPane { if (this.actionsContainer) { dom.clearNode(this.actionsContainer); - const scopedInstantiationService = this.renderDisposables.add(this.instantiationService.createChild(new ServiceCollection([IContextKeyService, this.scopedContextKeyService]))); - this.renderDisposables.add(bindContextKey(ChatContextKeys.hasAgentSessionChanges, this.scopedContextKeyService, reader => { const { files } = topLevelStats.read(reader); return files > 0; @@ -646,6 +645,10 @@ export class ChangesViewPane extends ViewPane { return metadata?.pullRequestUrl !== undefined; })); + const scopedServiceCollection = new ServiceCollection([IContextKeyService, this.scopedContextKeyService]); + const scopedInstantiationService = this.instantiationService.createChild(scopedServiceCollection); + this.renderDisposables.add(scopedInstantiationService); + this.renderDisposables.add(autorun(reader => { const { added, removed } = topLevelStats.read(reader); const sessionResource = this.viewModel.activeSessionResourceObs.read(reader); diff --git a/src/vs/sessions/contrib/changes/browser/toggleChangesView.ts b/src/vs/sessions/contrib/changes/browser/changesViewController.ts similarity index 97% rename from src/vs/sessions/contrib/changes/browser/toggleChangesView.ts rename to src/vs/sessions/contrib/changes/browser/changesViewController.ts index ff3ee68fdcd..95a090d25cc 100644 --- a/src/vs/sessions/contrib/changes/browser/toggleChangesView.ts +++ b/src/vs/sessions/contrib/changes/browser/changesViewController.ts @@ -20,9 +20,9 @@ interface IPendingTurnState { readonly submittedAt: number; } -export class ToggleChangesViewContribution extends Disposable { +export class ChangesViewController extends Disposable { - static readonly ID = 'workbench.contrib.toggleChangesView'; + static readonly ID = 'workbench.contrib.changesViewController'; private readonly pendingTurnStateByResource = new ResourceMap();