diff --git a/extensions/vscode-api-tests/src/singlefolder-tests/quickInput.test.ts b/extensions/vscode-api-tests/src/singlefolder-tests/quickInput.test.ts index ff1329efd21..6d9c6ceaf19 100644 --- a/extensions/vscode-api-tests/src/singlefolder-tests/quickInput.test.ts +++ b/extensions/vscode-api-tests/src/singlefolder-tests/quickInput.test.ts @@ -14,6 +14,7 @@ interface QuickPickExpected { acceptedItems: { active: string[][]; selection: string[][]; + dispose: boolean[]; }; } @@ -34,7 +35,8 @@ suite('window namespace tests', function () { selectionItems: [['zwei']], acceptedItems: { active: [['zwei']], - selection: [['zwei']] + selection: [['zwei']], + dispose: [true] }, }, (err?: any) => done(err)); quickPick.items = ['eins', 'zwei', 'drei'].map(label => ({ label })); @@ -59,7 +61,8 @@ suite('window namespace tests', function () { selectionItems: [['zwei']], acceptedItems: { active: [['zwei']], - selection: [['zwei']] + selection: [['zwei']], + dispose: [true] }, }, (err?: any) => done(err)); quickPick.items = ['eins', 'zwei', 'drei'].map(label => ({ label })); @@ -84,7 +87,8 @@ suite('window namespace tests', function () { selectionItems: [['eins'], ['eins', 'zwei']], acceptedItems: { active: [['zwei']], - selection: [['eins', 'zwei']] + selection: [['eins', 'zwei']], + dispose: [true] }, }, (err?: any) => done(err)); quickPick.canSelectMany = true; @@ -100,6 +104,31 @@ suite('window namespace tests', function () { })() .catch(err => done(err)); }); + + test('createQuickPick, selection events', function (_done) { + let done = (err?: any) => { + done = () => {}; + _done(err); + }; + + const quickPick = createQuickPick({ + events: ['active', 'selection', 'accept', 'selection', 'accept', 'hide'], + activeItems: [['eins']], + selectionItems: [['zwei'], ['drei']], + acceptedItems: { + active: [['eins'], ['eins']], + selection: [['zwei'], ['drei']], + dispose: [false, true] + }, + }, (err?: any) => done(err)); + quickPick.items = ['eins', 'zwei', 'drei'].map(label => ({ label })); + quickPick.show(); + + quickPick.selectedItems = [quickPick.items[1]]; + setTimeout(() => { + quickPick.selectedItems = [quickPick.items[2]]; + }, 0); + }); }); }); @@ -132,7 +161,9 @@ function createQuickPick(expected: QuickPickExpected, done: (err?: any) => void) assert.deepEqual(quickPick.activeItems.map(item => item.label), expectedActive); const expectedSelection = expected.acceptedItems.selection.shift(); assert.deepEqual(quickPick.selectedItems.map(item => item.label), expectedSelection); - quickPick.dispose(); + if (expected.acceptedItems.dispose.shift()) { + quickPick.dispose(); + } } catch (err) { done(err); } diff --git a/src/vs/workbench/browser/parts/quickinput/quickInput.ts b/src/vs/workbench/browser/parts/quickinput/quickInput.ts index 30b1d260ed7..9589aa8d8b8 100644 --- a/src/vs/workbench/browser/parts/quickinput/quickInput.ts +++ b/src/vs/workbench/browser/parts/quickinput/quickInput.ts @@ -496,6 +496,9 @@ class QuickPick extends QuickInput implements IQuickPi }), this.ui.list.onDidChangeSelection(selectedItems => { if (this.canSelectMany) { + if (selectedItems.length) { + this.ui.list.setSelectedElements([]); + } return; } if (this.selectedItemsToConfirm !== this._selectedItems && equals(selectedItems, this._selectedItems, (a, b) => a === b)) { diff --git a/src/vs/workbench/browser/parts/quickinput/quickInputList.ts b/src/vs/workbench/browser/parts/quickinput/quickInputList.ts index 70278c06f34..234ab1147a0 100644 --- a/src/vs/workbench/browser/parts/quickinput/quickInputList.ts +++ b/src/vs/workbench/browser/parts/quickinput/quickInputList.ts @@ -282,11 +282,6 @@ export class QuickInputList { this._onLeave.fire(); } })); - this.disposables.push(this.list.onSelectionChange(e => { - if (e.elements.length) { - this.list.setSelection([]); - } - })); } @memoize