@@ -11,7 +11,7 @@ import type { create as createEditor, createDiffEditor } from 'vs/editor/standal
1111import { errorHandler } from 'vs/base/common/errors'
1212import { FoldingModel , setCollapseStateForMatchingLines } from 'vs/editor/contrib/folding/browser/foldingModel'
1313import { FoldingController } from 'vs/editor/contrib/folding/browser/folding'
14- import { DisposableStore , IReference } from 'vs/base/common/lifecycle'
14+ import { DisposableStore , IDisposable , IReference } from 'vs/base/common/lifecycle'
1515import { Registry } from 'vs/platform/registry/common/platform'
1616import { IJSONContributionRegistry , Extensions as JsonExtensions } from 'vs/platform/jsonschemas/common/jsonContributionRegistry'
1717import { CommandsRegistry , ICommandService } from 'vs/platform/commands/common/commands'
@@ -39,7 +39,7 @@ import { ILogService } from 'vs/platform/log/common/log'
3939import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'
4040import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'
4141import { KeybindingResolver } from 'vs/platform/keybinding/common/keybindingResolver'
42- import { WorkbenchKeybindingService } from 'vs/workbench/services/ keybinding/browser/keybindingService '
42+ import { ResolvedKeybindingItem } from 'vs/platform/ keybinding/common/resolvedKeybindingItem '
4343import { createInjectedClass } from './tools/injection'
4444// Selectively comes from vs/workbench/contrib/codeEditor/browser/codeEditor.contribution.ts
4545import 'vs/workbench/contrib/codeEditor/browser/workbenchReferenceSearch'
@@ -178,13 +178,21 @@ export async function createModelReference (resource: URI, content?: string): Pr
178178 return ( await StandaloneServices . get ( ITextModelService ) . createModelReference ( resource ) ) as IReference < ITextFileEditorModel >
179179}
180180
181+ export interface DynamicKeybindingService extends IKeybindingService {
182+ registerKeybindingProvider ( provider : ( ) => ResolvedKeybindingItem [ ] ) : IDisposable
183+ _getResolver ( ) : KeybindingResolver
184+ }
185+
186+ function isDynamicKeybindingService ( keybindingService : IKeybindingService ) {
187+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
188+ return ( keybindingService as DynamicKeybindingService ) . registerKeybindingProvider != null
189+ }
190+
181191// This class use useful so editor.addAction and editor.addCommand still work
182192// Monaco do an `instanceof` on the KeybindingService so we need it to extends `StandaloneKeybindingService`
183193class DelegateStandaloneKeybindingService extends StandaloneKeybindingService {
184- private _cachedOverridenResolver : KeybindingResolver | null
185-
186194 constructor (
187- private delegate : WorkbenchKeybindingService ,
195+ private delegate : DynamicKeybindingService ,
188196 @IContextKeyService contextKeyService : IContextKeyService ,
189197 @ICommandService commandService : ICommandService ,
190198 @ITelemetryService telemetryService : ITelemetryService ,
@@ -193,29 +201,12 @@ class DelegateStandaloneKeybindingService extends StandaloneKeybindingService {
193201 @ICodeEditorService codeEditorService : ICodeEditorService
194202 ) {
195203 super ( contextKeyService , commandService , telemetryService , notificationService , logService , codeEditorService )
196- this . _cachedOverridenResolver = null
197-
198- this . onDidUpdateKeybindings ( ( ) => {
199- this . _cachedOverridenResolver = null
200- } )
201- this . delegate . onDidUpdateKeybindings ( ( ) => {
202- this . _cachedOverridenResolver = null
203- } )
204+
205+ this . _register ( delegate . registerKeybindingProvider ( ( ) => this . getUserKeybindingItems ( ) ) )
204206 }
205207
206208 protected override _getResolver ( ) : KeybindingResolver {
207- // Create a new resolver that uses the keybindings from WorkbenchKeybindingService, overriden by _dynamicKeybindings from StandaloneKeybindingService
208- if ( this . _cachedOverridenResolver == null ) {
209- // eslint-disable-next-line dot-notation
210- const overrides = this [ '_toNormalizedKeybindingItems' ] ( this [ '_dynamicKeybindings' ] , false )
211- this . _cachedOverridenResolver = new KeybindingResolver (
212- // eslint-disable-next-line dot-notation
213- [ ...this . delegate [ '_getResolver' ] ( ) . getKeybindings ( ) ] ,
214- overrides
215- , ( str ) => this . _log ( str )
216- )
217- }
218- return this . _cachedOverridenResolver
209+ return this . delegate . _getResolver ( )
219210 }
220211}
221212
@@ -225,7 +216,7 @@ function getStandaloneEditorInstantiationService () {
225216 const serviceCollection = new ServiceCollection ( )
226217 serviceCollection . set ( IQuickInputService , new SyncDescriptor ( StandaloneQuickInputService , undefined , true ) )
227218 const keybindingService = StandaloneServices . get ( IKeybindingService )
228- if ( keybindingService instanceof WorkbenchKeybindingService ) {
219+ if ( ! ( keybindingService instanceof StandaloneKeybindingService ) && isDynamicKeybindingService ( keybindingService ) ) {
229220 serviceCollection . set ( IKeybindingService , new SyncDescriptor ( DelegateStandaloneKeybindingService , [ keybindingService ] , true ) )
230221 }
231222 standaloneEditorInstantiationService = StandaloneServices . get ( IInstantiationService ) . createChild ( serviceCollection )
0 commit comments