44 *--------------------------------------------------------------------------------------------*/
55
66import 'vs/css!./media/quickInput' ;
7- import { IQuickPickItem , IPickOptions , IInputOptions , IQuickNavigateConfiguration , IQuickPick , IQuickInput , IQuickInputButton , IInputBox , IQuickPickItemButtonEvent , QuickPickInput , IQuickPickSeparator , IKeyMods } from 'vs/base/parts/quickinput/common/quickInput' ;
7+ import { IQuickPickItem , IPickOptions , IInputOptions , IQuickNavigateConfiguration , IQuickPick , IQuickInput , IQuickInputButton , IInputBox , IQuickPickItemButtonEvent , QuickPickInput , IQuickPickSeparator , IKeyMods , IQuickPickAcceptEvent } from 'vs/base/parts/quickinput/common/quickInput' ;
88import * as dom from 'vs/base/browser/dom' ;
99import { CancellationToken } from 'vs/base/common/cancellation' ;
1010import { QuickInputList } from './quickInputList' ;
@@ -379,11 +379,12 @@ class QuickPick<T extends IQuickPickItem> extends QuickInput implements IQuickPi
379379 private _ariaLabel = QuickPick . DEFAULT_ARIA_LABEL ;
380380 private _placeholder : string | undefined ;
381381 private readonly onDidChangeValueEmitter = this . _register ( new Emitter < string > ( ) ) ;
382- private readonly onDidAcceptEmitter = this . _register ( new Emitter < void > ( ) ) ;
382+ private readonly onDidAcceptEmitter = this . _register ( new Emitter < IQuickPickAcceptEvent > ( ) ) ;
383383 private readonly onDidCustomEmitter = this . _register ( new Emitter < void > ( ) ) ;
384384 private _items : Array < T | IQuickPickSeparator > = [ ] ;
385385 private itemsUpdated = false ;
386386 private _canSelectMany = false ;
387+ private _canAcceptInBackground = false ;
387388 private _matchOnDescription = false ;
388389 private _matchOnDetail = false ;
389390 private _matchOnLabel = true ;
@@ -462,6 +463,14 @@ class QuickPick<T extends IQuickPickItem> extends QuickInput implements IQuickPi
462463 this . update ( ) ;
463464 }
464465
466+ get canAcceptInBackground ( ) {
467+ return this . _canAcceptInBackground ;
468+ }
469+
470+ set canAcceptInBackground ( canAcceptInBackground : boolean ) {
471+ this . _canAcceptInBackground = canAcceptInBackground ;
472+ }
473+
465474 get matchOnDescription ( ) {
466475 return this . _matchOnDescription ;
467476 }
@@ -663,6 +672,22 @@ class QuickPick<T extends IQuickPickItem> extends QuickInput implements IQuickPi
663672 this . ui . list . domFocus ( ) ;
664673 }
665674 event . preventDefault ( ) ;
675+ break ;
676+ case KeyCode . RightArrow :
677+ if ( ! this . _canAcceptInBackground ) {
678+ return ; // needs to be enabled
679+ }
680+
681+ if ( ! this . ui . inputBox . isSelectionAtEnd ( ) ) {
682+ return ; // ensure input box selection at end
683+ }
684+
685+ if ( this . activeItems [ 0 ] ) {
686+ this . _selectedItems = [ this . activeItems [ 0 ] ] ;
687+ this . onDidChangeSelectionEmitter . fire ( this . selectedItems ) ;
688+ this . onDidAcceptEmitter . fire ( { inBackground : true } ) ;
689+ }
690+
666691 break ;
667692 }
668693 } ) ) ;
@@ -671,7 +696,7 @@ class QuickPick<T extends IQuickPickItem> extends QuickInput implements IQuickPi
671696 this . _selectedItems = [ this . activeItems [ 0 ] ] ;
672697 this . onDidChangeSelectionEmitter . fire ( this . selectedItems ) ;
673698 }
674- this . onDidAcceptEmitter . fire ( undefined ) ;
699+ this . onDidAcceptEmitter . fire ( { inBackground : false } ) ;
675700 } ) ) ;
676701 this . visibleDisposables . add ( this . ui . onDidCustom ( ( ) => {
677702 this . onDidCustomEmitter . fire ( undefined ) ;
@@ -686,7 +711,7 @@ class QuickPick<T extends IQuickPickItem> extends QuickInput implements IQuickPi
686711 this . _activeItems = focusedItems as T [ ] ;
687712 this . onDidChangeActiveEmitter . fire ( focusedItems as T [ ] ) ;
688713 } ) ) ;
689- this . visibleDisposables . add ( this . ui . list . onDidChangeSelection ( selectedItems => {
714+ this . visibleDisposables . add ( this . ui . list . onDidChangeSelection ( ( { items : selectedItems , event } ) => {
690715 if ( this . canSelectMany ) {
691716 if ( selectedItems . length ) {
692717 this . ui . list . setSelectedElements ( [ ] ) ;
@@ -699,7 +724,7 @@ class QuickPick<T extends IQuickPickItem> extends QuickInput implements IQuickPi
699724 this . _selectedItems = selectedItems as T [ ] ;
700725 this . onDidChangeSelectionEmitter . fire ( selectedItems as T [ ] ) ;
701726 if ( selectedItems . length ) {
702- this . onDidAcceptEmitter . fire ( undefined ) ;
727+ this . onDidAcceptEmitter . fire ( { inBackground : ( event as MouseEvent ) . button === 1 /* mouse middle click */ } ) ;
703728 }
704729 } ) ) ;
705730 this . visibleDisposables . add ( this . ui . list . onChangedCheckedElements ( checkedItems => {
@@ -762,7 +787,7 @@ class QuickPick<T extends IQuickPickItem> extends QuickInput implements IQuickPi
762787 if ( wasTriggerKeyPressed && this . activeItems [ 0 ] ) {
763788 this . _selectedItems = [ this . activeItems [ 0 ] ] ;
764789 this . onDidChangeSelectionEmitter . fire ( this . selectedItems ) ;
765- this . onDidAcceptEmitter . fire ( undefined ) ;
790+ this . onDidAcceptEmitter . fire ( { inBackground : false } ) ;
766791 }
767792 } ) ;
768793 }
0 commit comments