Skip to content

Commit 0562301

Browse files
author
Benjamin Pasero
committed
quick access 💄
1 parent 5d792c1 commit 0562301

1 file changed

Lines changed: 28 additions & 21 deletions

File tree

src/vs/platform/quickinput/browser/quickAccess.ts

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)