diff --git a/extensions/vscode-api-tests/src/singlefolder-tests/window.test.ts b/extensions/vscode-api-tests/src/singlefolder-tests/window.test.ts index 97bace17e732c5f879464f53cc5a960d4217ef8e..286936c8659ec498dba5b26a1d26fe15ba24435e 100644 --- a/extensions/vscode-api-tests/src/singlefolder-tests/window.test.ts +++ b/extensions/vscode-api-tests/src/singlefolder-tests/window.test.ts @@ -369,12 +369,21 @@ suite('window namespace tests', () => { } return null; } - }).then(value => { - assert.equal(value, undefined); }); - const exec = commands.executeCommand('workbench.action.acceptSelectedQuickOpenItem'); - return Promise.all([result, exec]); + const accept = commands.executeCommand('workbench.action.acceptSelectedQuickOpenItem'); + return Promise.race([ + result.then(() => assert.ok(false)), + accept.then(() => assert.ok(false), err => assert.ok(err)) + .then(() => new Promise(resolve => setTimeout(resolve, 10))) + ]) + .then(() => { + const close = commands.executeCommand('workbench.action.closeQuickOpen'); + return Promise.all([result, close]) + .then(([value]) => { + assert.equal(value, undefined); + }); + }); }); diff --git a/src/vs/platform/quickinput/common/quickInput.ts b/src/vs/platform/quickinput/common/quickInput.ts index e8a94713ac6176623e21fbc8457bc0ea9f5fcf25..cd9097598e1ee6f952bb6e273e7d7044c95dbfe6 100644 --- a/src/vs/platform/quickinput/common/quickInput.ts +++ b/src/vs/platform/quickinput/common/quickInput.ts @@ -17,4 +17,7 @@ export interface IQuickInputService { pick(picks: TPromise, options?: IPickOptions, token?: CancellationToken): TPromise; input(options?: IInputOptions, token?: CancellationToken): TPromise; + focus(): void; + accept(): TPromise; + cancel(): TPromise; } diff --git a/src/vs/workbench/browser/parts/quickinput/quickInput.ts b/src/vs/workbench/browser/parts/quickinput/quickInput.ts index bcfae173a10c129ebda052425fb6c99417343d97..5e801b9387085eddc11d942ea0054b38fe4ce49f 100644 --- a/src/vs/workbench/browser/parts/quickinput/quickInput.ts +++ b/src/vs/workbench/browser/parts/quickinput/quickInput.ts @@ -365,13 +365,16 @@ export class QuickInputService extends Component implements IQuickInputService { if (this.controller) { const resolved = this.controller.resolve(ok); if (resolved) { - resolved - .then(() => this.container.style.display = 'none') - .then(null, onUnexpectedError); - return; + const result = resolved + .then(() => { + this.container.style.display = 'none'; + }); + result.then(null, onUnexpectedError); + return result; } } this.container.style.display = 'none'; + return TPromise.as(undefined); } pick(picks: TPromise, options: IPickOptions = {}, token?: CancellationToken): TPromise { @@ -449,7 +452,21 @@ export class QuickInputService extends Component implements IQuickInputService { return this.controller.result; } - public layout(dimension: dom.Dimension): void { + focus() { + if (this.ui) { + this.ui.inputBox.setFocus(); + } + } + + accept() { + return this.close(true); + } + + cancel() { + return this.close(); + } + + layout(dimension: dom.Dimension): void { this.layoutDimensions = dimension; this.updateLayout(); } diff --git a/src/vs/workbench/browser/parts/quickopen/quickopen.contribution.ts b/src/vs/workbench/browser/parts/quickopen/quickopen.contribution.ts index 63545e09e78f1ac02687e40b7eb2962734a4dd51..3f4ad79d9b0e8e5ffbc9ba79578bb6bef9264a55 100644 --- a/src/vs/workbench/browser/parts/quickopen/quickopen.contribution.ts +++ b/src/vs/workbench/browser/parts/quickopen/quickopen.contribution.ts @@ -12,6 +12,7 @@ import { IWorkbenchActionRegistry, Extensions as ActionExtensions } from 'vs/wor import { KeybindingsRegistry } from 'vs/platform/keybinding/common/keybindingsRegistry'; import { RemoveFromEditorHistoryAction } from 'vs/workbench/browser/parts/quickopen/quickOpenController'; import { QuickOpenSelectNextAction, QuickOpenSelectPreviousAction, inQuickOpenContext, getQuickNavigateHandler, QuickOpenNavigateNextAction, QuickOpenNavigatePreviousAction, defaultQuickOpenContext, QUICKOPEN_ACTION_ID, QUICKOPEN_ACION_LABEL } from 'vs/workbench/browser/parts/quickopen/quickopen'; +import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput'; KeybindingsRegistry.registerCommandAndKeybindingRule({ id: 'workbench.action.closeQuickOpen', @@ -21,6 +22,8 @@ KeybindingsRegistry.registerCommandAndKeybindingRule({ handler: accessor => { const quickOpenService = accessor.get(IQuickOpenService); quickOpenService.close(); + const quickInputService = accessor.get(IQuickInputService); + return quickInputService.cancel(); } }); @@ -32,6 +35,8 @@ KeybindingsRegistry.registerCommandAndKeybindingRule({ handler: accessor => { const quickOpenService = accessor.get(IQuickOpenService); quickOpenService.accept(); + const quickInputService = accessor.get(IQuickInputService); + return quickInputService.accept(); } }); @@ -43,6 +48,8 @@ KeybindingsRegistry.registerCommandAndKeybindingRule({ handler: accessor => { const quickOpenService = accessor.get(IQuickOpenService); quickOpenService.focus(); + const quickInputService = accessor.get(IQuickInputService); + quickInputService.focus(); } });