mirror of
https://github.com/Microsoft/vscode
synced 2024-08-28 05:19:39 +00:00
context keys: allow registering constant context keys after startup
This commit is contained in:
parent
d08ec5d974
commit
18703b5872
|
@ -11,6 +11,7 @@ import { Scanner, LexingError, Token, TokenType } from 'vs/platform/contextkey/c
|
|||
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { localize } from 'vs/nls';
|
||||
import { IDisposable } from 'vs/base/common/lifecycle';
|
||||
import { illegalArgument } from 'vs/base/common/errors';
|
||||
|
||||
const CONSTANT_VALUES = new Map<string, boolean>();
|
||||
CONSTANT_VALUES.set('false', false);
|
||||
|
@ -25,6 +26,13 @@ CONSTANT_VALUES.set('isFirefox', isFirefox);
|
|||
CONSTANT_VALUES.set('isChrome', isChrome);
|
||||
CONSTANT_VALUES.set('isSafari', isSafari);
|
||||
|
||||
/** allow register constant context keys that are known only after startup; requires running `substituteConstants` on the context key - https://github.com/microsoft/vscode/issues/174218#issuecomment-1437972127 */
|
||||
export function setConstant(key: string, value: boolean) {
|
||||
if (CONSTANT_VALUES.get(key) !== undefined) { throw illegalArgument('contextkey.setConstant(k, v) invoked with already set constant `k`'); }
|
||||
|
||||
CONSTANT_VALUES.set(key, value);
|
||||
}
|
||||
|
||||
const hasOwnProperty = Object.prototype.hasOwnProperty;
|
||||
|
||||
export const enum ContextKeyExprType {
|
||||
|
|
|
@ -53,7 +53,10 @@ export class KeybindingResolver {
|
|||
continue;
|
||||
}
|
||||
|
||||
if (k.when && k.when.type === ContextKeyExprType.False) {
|
||||
// substitute with constants that are registered after startup - https://github.com/microsoft/vscode/issues/174218#issuecomment-1437972127
|
||||
const when = k.when?.substituteConstants();
|
||||
|
||||
if (when && when.type === ContextKeyExprType.False) {
|
||||
// when condition is false
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
import { Event } from 'vs/base/common/event';
|
||||
import { Disposable } from 'vs/base/common/lifecycle';
|
||||
import { IContextKeyService, IContextKey } from 'vs/platform/contextkey/common/contextkey';
|
||||
import { IContextKeyService, IContextKey, setConstant as setConstantContextKey } from 'vs/platform/contextkey/common/contextkey';
|
||||
import { InputFocusedContext, IsMacContext, IsLinuxContext, IsWindowsContext, IsWebContext, IsMacNativeContext, IsDevelopmentContext, IsIOSContext, ProductQualityContext, IsMobileContext } from 'vs/platform/contextkey/common/contextkeys';
|
||||
import { SplitEditorsVertically, InEditorZenModeContext, ActiveEditorCanRevertContext, ActiveEditorGroupLockedContext, ActiveEditorCanSplitInGroupContext, SideBySideEditorActiveContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, ActiveEditorContext, EditorsVisibleContext, TextCompareEditorVisibleContext, TextCompareEditorActiveContext, ActiveEditorGroupEmptyContext, MultipleEditorGroupsContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsCenteredLayoutContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorReadonlyContext, EditorAreaVisibleContext, ActiveEditorAvailableEditorIdsContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext } from 'vs/workbench/common/contextkeys';
|
||||
import { TEXT_DIFF_EDITOR_ID, EditorInputCapabilities, SIDE_BY_SIDE_EDITOR_ID, DEFAULT_EDITOR_ASSOCIATION } from 'vs/workbench/common/editor';
|
||||
|
@ -108,7 +108,9 @@ export class WorkbenchContextKeysHandler extends Disposable {
|
|||
HasWebFileSystemAccess.bindTo(this.contextKeyService).set(WebFileSystemAccess.supported(window));
|
||||
|
||||
// Development
|
||||
IsDevelopmentContext.bindTo(this.contextKeyService).set(!this.environmentService.isBuilt || this.environmentService.isExtensionDevelopment);
|
||||
const isDevelopment = !this.environmentService.isBuilt || this.environmentService.isExtensionDevelopment;
|
||||
IsDevelopmentContext.bindTo(this.contextKeyService).set(isDevelopment);
|
||||
setConstantContextKey(IsDevelopmentContext.key, isDevelopment);
|
||||
|
||||
// Product Service
|
||||
ProductQualityContext.bindTo(this.contextKeyService).set(this.productService.quality || '');
|
||||
|
|
Loading…
Reference in a new issue