From 3d7e8a3b6b679a8299960a39c2901e0a78aa70b2 Mon Sep 17 00:00:00 2001 From: Marc Dumais Date: Wed, 29 Mar 2023 14:39:34 -0400 Subject: [PATCH] monaco-quick-input-service: set context key "inQuickOpen" Context Key "inQuickOpen" exists in vscode and its value (true or false) reflects whether the Quick Open, AKA Quick input, is currently open/visible or not. This context key can be useful in Theia too, e.g. it can be used in the "when" clause of commands registered by vscode extensions, or programmatically whenever it's useful to know the state of the Quick Open UI. Signed-off-by: Marc Dumais --- packages/monaco/src/browser/monaco-quick-input-service.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/monaco/src/browser/monaco-quick-input-service.ts b/packages/monaco/src/browser/monaco-quick-input-service.ts index cd5ae03346eeb..de0ab11dd6461 100644 --- a/packages/monaco/src/browser/monaco-quick-input-service.ts +++ b/packages/monaco/src/browser/monaco-quick-input-service.ts @@ -30,6 +30,7 @@ import { MonacoResolvedKeybinding } from './monaco-resolved-keybinding'; import { IQuickAccessController } from '@theia/monaco-editor-core/esm/vs/platform/quickinput/common/quickAccess'; import { QuickAccessController } from '@theia/monaco-editor-core/esm/vs/platform/quickinput/browser/quickAccess'; import { ContextKeyService as VSCodeContextKeyService } from '@theia/monaco-editor-core/esm/vs/platform/contextkey/browser/contextKeyService'; +import { IContextKey } from '@theia/monaco-editor-core/esm/vs/platform/contextkey/common/contextkey'; import { IListOptions, List } from '@theia/monaco-editor-core/esm/vs/base/browser/ui/list/listWidget'; import * as monaco from '@theia/monaco-editor-core'; import { ResolvedKeybinding } from '@theia/monaco-editor-core/esm/vs/base/common/keybindings'; @@ -76,6 +77,7 @@ export class MonacoQuickInputImplementation implements IQuickInputService { @inject(VSCodeContextKeyService) protected readonly contextKeyService: VSCodeContextKeyService; + protected contextKey: IContextKey; protected container: HTMLElement; private quickInputList: List; @@ -100,7 +102,7 @@ export class MonacoQuickInputImplementation implements IQuickInputService { setContextKey(key: string | undefined): void { if (key) { - this.contextKeyService.createKey(key, undefined); + this.contextKey = this.contextKeyService.createKey(key, undefined); } } @@ -177,6 +179,9 @@ export class MonacoQuickInputImplementation implements IQuickInputService { private initController(): void { this.controller = new QuickInputController(this.getOptions()); + this.setContextKey('inQuickOpen'); + this.onShow(() => { this.contextKey.set(true); }); + this.onHide(() => { this.contextKey.set(false); }); this.updateLayout(); }