Skip to content

Commit 06ff706

Browse files
committed
fix overlay when editing previous requests
1 parent 69037ec commit 06ff706

File tree

4 files changed

+37
-4
lines changed

4 files changed

+37
-4
lines changed

src/vs/workbench/contrib/chat/browser/chatInputPart.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,9 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge
158158
private _onDidAcceptFollowup: Emitter<{ followup: IChatFollowup; response: IChatResponseViewModel | undefined }>;
159159
readonly onDidAcceptFollowup: Event<{ followup: IChatFollowup; response: IChatResponseViewModel | undefined }>;
160160

161+
private _onDidClickOverlay: Emitter<void> = new Emitter<void>();
162+
readonly onDidClickOverlay: Event<void> = this._onDidClickOverlay.event;
163+
161164
private readonly _attachmentModel: ChatAttachmentModel;
162165
public get attachmentModel(): ChatAttachmentModel {
163166
return this._attachmentModel;
@@ -217,6 +220,7 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge
217220
private attachmentsContainer!: HTMLElement;
218221

219222
private chatInputOverlay!: HTMLElement;
223+
private _overlayClickListener: IDisposable | undefined;
220224

221225
private attachedContextContainer!: HTMLElement;
222226
private readonly attachedContextDisposables: MutableDisposable<DisposableStore>;
@@ -1303,6 +1307,17 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge
13031307

13041308
public toggleChatInputOverlay(editing: boolean): void {
13051309
this.chatInputOverlay.classList.toggle('disabled', editing);
1310+
if (editing) {
1311+
this._overlayClickListener?.dispose();
1312+
this._overlayClickListener = this._register(dom.addStandardDisposableListener(this.chatInputOverlay, dom.EventType.CLICK, e => {
1313+
e.preventDefault();
1314+
e.stopPropagation();
1315+
this._onDidClickOverlay.fire();
1316+
}));
1317+
} else {
1318+
this._overlayClickListener?.dispose();
1319+
this._overlayClickListener = undefined;
1320+
}
13061321
}
13071322

13081323
public renderAttachedContext() {

src/vs/workbench/contrib/chat/browser/chatListRenderer.ts

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,22 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer<Ch
474474
}
475475
}));
476476
const template: IChatListItemTemplate = { header, avatarContainer, requestHover, username, detail, value, rowContainer, elementDisposables, templateDisposables, contextKeyService, instantiationService: scopedInstantiationService, agentHover, titleToolbar, footerToolbar, footerDetailsContainer, disabledOverlay, checkpointToolbar, checkpointRestoreToolbar, checkpointContainer, checkpointRestoreContainer };
477+
478+
templateDisposables.add(dom.addDisposableListener(disabledOverlay, dom.EventType.CLICK, e => {
479+
if (!this.viewModel?.editing) {
480+
return;
481+
}
482+
const current = template.currentElement;
483+
if (!current || current.id === this.viewModel.editing.id) {
484+
return;
485+
}
486+
487+
if (disabledOverlay.classList.contains('disabled')) {
488+
e.preventDefault();
489+
e.stopPropagation();
490+
this._onDidFocusOutside.fire();
491+
}
492+
}));
477493
return template;
478494
}
479495

@@ -575,7 +591,7 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer<Ch
575591
templateData.requestHover.classList.toggle('hidden', (!!this.viewModel?.editing && !editing) || isResponseVM(element));
576592
templateData.requestHover.classList.toggle('expanded', this.configService.getValue<string>('chat.editRequests') === 'hover');
577593
templateData.requestHover.classList.toggle('checkpoints-enabled', checkpointEnabled);
578-
templateData.elementDisposables.add(dom.addDisposableListener(templateData.rowContainer, dom.EventType.CLICK, (e) => {
594+
templateData.elementDisposables.add(dom.addStandardDisposableListener(templateData.rowContainer, dom.EventType.CLICK, (e) => {
579595
const current = templateData.currentElement;
580596
if (current && this.viewModel?.editing && current.id !== this.viewModel.editing.id) {
581597
e.stopPropagation();
@@ -584,6 +600,8 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer<Ch
584600
}
585601
}));
586602

603+
// Overlay click listener removed: overlay is non-interactive in cancel-on-any-row mode.
604+
587605
// hack @joaomoreno
588606
templateData.rowContainer.parentElement?.parentElement?.parentElement?.classList.toggle('request', isRequestVM(element));
589607
templateData.rowContainer.classList.toggle(mostRecentResponseClassName, index === this.delegate.getListLength() - 1);

src/vs/workbench/contrib/chat/browser/chatWidget.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1163,7 +1163,7 @@ export class ChatWidget extends Disposable implements IChatWidget {
11631163
this.onDidChangeItems();
11641164
this.input.inputEditor.focus();
11651165

1166-
this._register(dom.addDisposableListener(this.inputPart.element, dom.EventType.CLICK, () => {
1166+
this._register(this.inputPart.onDidClickOverlay(() => {
11671167
if (this.viewModel?.editing && this.configurationService.getValue<string>('chat.editRequests') !== 'input') {
11681168
this.finishedEditing();
11691169
}

src/vs/workbench/contrib/chat/browser/media/chat.css

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2342,11 +2342,11 @@ have to be updated for changes to the rules above, or to support more deeply nes
23422342
height: 100%;
23432343
background-color: var(--vscode-sideBar-background);
23442344
opacity: 0.6;
2345-
pointer-events: none;
23462345
display: flex;
2347-
cursor: default;
23482346
z-index: 101;
23492347
user-select: none;
2348+
pointer-events: auto;
2349+
cursor: default;
23502350
}
23512351

23522352
.interactive-session .focused-input-dom {

0 commit comments

Comments
 (0)