@@ -64,6 +64,10 @@ async function updateUserKeybindings(keybindingsJson: string): Promise<void> {
6464 )
6565}
6666
67+ export interface LockKeyCodesOverride {
68+ ( keyCodes : string [ ] , next : ( keyCodes : string [ ] ) => void ) : void
69+ }
70+
6771class DynamicWorkbenchKeybindingService
6872 extends WorkbenchKeybindingService
6973 implements DynamicKeybindingService
@@ -72,6 +76,7 @@ class DynamicWorkbenchKeybindingService
7276
7377 constructor (
7478 private shouldUseGlobalKeybindings : ( ) => boolean ,
79+ private _lockKeyCodesOverride : LockKeyCodesOverride ,
7580 @IContextKeyService contextKeyService : IContextKeyService ,
7681 @ICommandService commandService : ICommandService ,
7782 @ITelemetryService telemetryService : ITelemetryService ,
@@ -157,20 +162,31 @@ class DynamicWorkbenchKeybindingService
157162 ...this . keybindingProviders . flatMap ( ( provider ) => provider . provideKeybindings ( ) )
158163 ]
159164 }
165+
166+ protected override lockKeyCodes ( keyCodes : string [ ] ) : void {
167+ this . _lockKeyCodesOverride ( keyCodes , ( keyCodes ) => super . lockKeyCodes ( keyCodes ) )
168+ }
160169}
161170
162- interface KeybindingsProps {
171+ export interface KeybindingsProps {
163172 shouldUseGlobalKeybindings ?: ( ) => boolean
173+ /**
174+ * Allows to override the key code lock (for instance, ['Escape'] during full screen)
175+ */
176+ lockKeyCodesOverride ?: LockKeyCodesOverride
164177}
165178
166179export default function getServiceOverride ( {
167- shouldUseGlobalKeybindings = ( ) => false
180+ shouldUseGlobalKeybindings = ( ) => false ,
181+ lockKeyCodesOverride = ( keyCodes , next ) => {
182+ next ( keyCodes )
183+ }
168184} : KeybindingsProps = { } ) : IEditorOverrideServices {
169185 return {
170186 ...getFileServiceOverride ( ) ,
171187 [ IKeybindingService . toString ( ) ] : new SyncDescriptor (
172188 DynamicWorkbenchKeybindingService ,
173- [ shouldUseGlobalKeybindings ] ,
189+ [ shouldUseGlobalKeybindings , lockKeyCodesOverride ] ,
174190 false
175191 ) ,
176192 [ IKeyboardLayoutService . toString ( ) ] : new SyncDescriptor ( BrowserKeyboardLayoutService , [ ] , true ) ,
0 commit comments