diff --git a/src/vs/workbench/browser/parts/overlay/pearOverlayPart.ts b/src/vs/workbench/browser/parts/overlay/pearOverlayPart.ts index 970f9da0047e2..b6831fdb65c8f 100644 --- a/src/vs/workbench/browser/parts/overlay/pearOverlayPart.ts +++ b/src/vs/workbench/browser/parts/overlay/pearOverlayPart.ts @@ -1,3 +1,5 @@ +/* eslint-disable header/header */ + import { Part } from "vs/workbench/browser/part"; import { IWorkbenchLayoutService, @@ -35,6 +37,7 @@ export class PearOverlayPart extends Part { private _webviewService: WebviewService | undefined; private state: "loading" | "open" | "closed" = "loading"; + private _isLocked: boolean = false; constructor( @IThemeService themeService: IThemeService, @@ -232,6 +235,10 @@ export class PearOverlayPart extends Part { } private close() { + if (this.isLocked) { + return; // Prevent closing when locked + } + if (this.state === "closed") { return; } @@ -283,6 +290,18 @@ export class PearOverlayPart extends Part { this.toggleOpenClose(); } + public lock(): void { + this._isLocked = true; + } + + public unlock(): void { + this._isLocked = false; + } + + public get isLocked(): boolean { + return this._isLocked; + } + toJSON(): object { return { type: Parts.PEAROVERLAY_PART, diff --git a/src/vs/workbench/browser/parts/overlay/pearOverlayService.ts b/src/vs/workbench/browser/parts/overlay/pearOverlayService.ts index 9f7fd44284ed9..f22a077a46df2 100644 --- a/src/vs/workbench/browser/parts/overlay/pearOverlayService.ts +++ b/src/vs/workbench/browser/parts/overlay/pearOverlayService.ts @@ -1,3 +1,5 @@ +/* eslint-disable header/header */ + import { registerSingleton, InstantiationType, @@ -43,6 +45,21 @@ export interface IPearOverlayService extends IDisposable { * Returns true if the PearAI popup is visible. */ isVisible(): boolean; + + /** + * Locks the PearAI popup. + */ + lock(): void; + + /** + * Unlocks the PearAI popup. + */ + unlock(): void; + + /** + * Returns true if the PearAI popup is locked. + */ + isLocked(): boolean; } export class PearOverlayService @@ -102,6 +119,21 @@ export class PearOverlayService const overlayService = accessor.get(IPearOverlayService); overlayService.toggle(); }); + + CommandsRegistry.registerCommand("pearai.lockOverlay", (accessor) => { + const overlayService = accessor.get(IPearOverlayService); + overlayService.lock(); + }); + + CommandsRegistry.registerCommand("pearai.unlockOverlay", (accessor) => { + const overlayService = accessor.get(IPearOverlayService); + overlayService.unlock(); + }); + + CommandsRegistry.registerCommand("pearai.isOverlayLocked", (accessor) => { + const overlayService = accessor.get(IPearOverlayService); + return overlayService.isLocked(); + }); } get pearOverlayPart(): PearOverlayPart { @@ -120,6 +152,18 @@ export class PearOverlayService this._pearOverlayPart.toggle(); } + lock(): void { + this._pearOverlayPart.lock(); + } + + unlock(): void { + this._pearOverlayPart.unlock(); + } + + isLocked(): boolean { + return this._pearOverlayPart.isLocked; + } + override dispose(): void { super.dispose(); this._pearOverlayPart.dispose(); @@ -128,7 +172,6 @@ export class PearOverlayService isVisible(): boolean { return this._pearOverlayPart.isVisible(); } - } registerSingleton(