@@ -26,7 +26,11 @@ export class QuickAccessController extends Disposable implements IQuickAccessCon
2626
2727 private readonly lastAcceptedPickerValues = new Map < IQuickAccessProviderDescriptor , string > ( ) ;
2828
29- private visibleQuickAccess : { picker : IQuickPick < IQuickPickItem > , descriptor : IQuickAccessProviderDescriptor | undefined , value : string } | undefined = undefined ;
29+ private visibleQuickAccess : {
30+ picker : IQuickPick < IQuickPickItem > ,
31+ descriptor : IQuickAccessProviderDescriptor | undefined ,
32+ value : string
33+ } | undefined = undefined ;
3034
3135 constructor (
3236 @IQuickInputService private readonly quickInputService : IQuickInputService ,
@@ -40,14 +44,34 @@ export class QuickAccessController extends Disposable implements IQuickAccessCon
4044 // Find provider for the value to show
4145 const [ provider , descriptor ] = this . getOrInstantiateProvider ( value ) ;
4246
47+ // Return early if quick access is already showing on that
48+ // same prefix and simply take over the filter value if it
49+ // is more specific and select it for the user to be able
50+ // to type over
51+ const visibleQuickAccess = this . visibleQuickAccess ;
52+ const visibleDescriptor = visibleQuickAccess ?. descriptor ;
53+ if ( visibleQuickAccess && descriptor && visibleDescriptor === descriptor ) {
54+
55+ // Take over the value only if it is not matching
56+ // the existing provider prefix or we are to preserve
57+ if ( value !== descriptor . prefix && ! options ?. preserveFilterValue ) {
58+ visibleQuickAccess . picker . value = value ;
59+ }
60+
61+ // Always adjust selection
62+ this . adjustValueSelection ( visibleQuickAccess . picker , descriptor , options ) ;
63+
64+ return ;
65+ }
66+
4367 // Rewrite the filter value based on certain rules unless disabled
4468 if ( descriptor && ! options ?. preserveFilterValue ) {
4569 let newValue : string | undefined = undefined ;
4670
4771 // If we have a visible provider with a value, take it's filter value but
4872 // rewrite to new provider prefix in case they differ
49- if ( this . visibleQuickAccess ?. descriptor && this . visibleQuickAccess . descriptor !== descriptor ) {
50- const newValueCandidateWithoutPrefix = this . visibleQuickAccess . value . substr ( this . visibleQuickAccess . descriptor . prefix . length ) ;
73+ if ( visibleQuickAccess && visibleDescriptor && visibleDescriptor !== descriptor ) {
74+ const newValueCandidateWithoutPrefix = visibleQuickAccess . value . substr ( visibleDescriptor . prefix . length ) ;
5175 if ( newValueCandidateWithoutPrefix ) {
5276 newValue = `${ descriptor . prefix } ${ newValueCandidateWithoutPrefix } ` ;
5377 }
@@ -69,23 +93,6 @@ export class QuickAccessController extends Disposable implements IQuickAccessCon
6993 }
7094 }
7195
72- // Return early if quick access is already showing and
73- // simply take over the filter value and select it for
74- // the user to be able to type over
75- if ( descriptor && this . visibleQuickAccess ?. descriptor === descriptor ) {
76- const picker = this . visibleQuickAccess . picker ;
77-
78- if ( value !== descriptor . prefix && ! options ?. preserveFilterValue ) {
79- // take over the value only if it is not matching
80- // the existing provider prefix or we are to preserve
81- picker . value = value ;
82- }
83-
84- this . adjustValueSelection ( picker , descriptor , options ) ;
85-
86- return ;
87- }
88-
8996 // Create a picker for the provider to use with the initial value
9097 // and adjust the filtering to exclude the prefix from filtering
9198 const disposables = new DisposableStore ( ) ;
@@ -94,7 +101,7 @@ export class QuickAccessController extends Disposable implements IQuickAccessCon
94101 this . adjustValueSelection ( picker , descriptor , options ) ;
95102 picker . placeholder = descriptor ?. placeholder ;
96103 picker . quickNavigate = options ?. quickNavigateConfiguration ;
97- picker . hideInput = ! ! picker . quickNavigate && ! this . visibleQuickAccess ; // only hide input if there was no picker opened already
104+ picker . hideInput = ! ! picker . quickNavigate && ! visibleQuickAccess ; // only hide input if there was no picker opened already
98105 picker . autoFocusSecondEntry = ! ! options ?. quickNavigateConfiguration || ! ! options ?. autoFocus ?. autoFocusSecondEntry ;
99106 picker . contextKey = descriptor ?. contextKey ;
100107 picker . filterValue = ( value : string ) => value . substring ( descriptor ? descriptor . prefix . length : 0 ) ;
0 commit comments