@@ -28,6 +28,7 @@ import { IKeyboardNavigationEventFilter, IAbstractTreeOptions, RenderIndentGuide
2828import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility' ;
2929
3030export type ListWidget = List < any > | PagedList < any > | ObjectTree < any , any > | DataTree < any , any , any > | AsyncDataTree < any , any , any > ;
31+ export type WorkbenchListWidget = WorkbenchList < any > | WorkbenchPagedList < any > | WorkbenchObjectTree < any , any > | WorkbenchCompressibleObjectTree < any , any > | WorkbenchDataTree < any , any , any > | WorkbenchAsyncDataTree < any , any , any > | WorkbenchCompressibleAsyncDataTree < any , any , any > ;
3132
3233export const IListService = createDecorator < IListService > ( 'listService' ) ;
3334
@@ -38,11 +39,11 @@ export interface IListService {
3839 /**
3940 * Returns the currently focused list widget if any.
4041 */
41- readonly lastFocusedList : ListWidget | undefined ;
42+ readonly lastFocusedList : WorkbenchListWidget | undefined ;
4243}
4344
4445interface IRegisteredList {
45- widget : ListWidget ;
46+ widget : WorkbenchListWidget ;
4647 extraContextKeys ?: ( IContextKey < boolean > ) [ ] ;
4748}
4849
@@ -52,17 +53,17 @@ export class ListService implements IListService {
5253
5354 private disposables = new DisposableStore ( ) ;
5455 private lists : IRegisteredList [ ] = [ ] ;
55- private _lastFocusedWidget : ListWidget | undefined = undefined ;
56+ private _lastFocusedWidget : WorkbenchListWidget | undefined = undefined ;
5657 private _hasCreatedStyleController : boolean = false ;
5758
58- get lastFocusedList ( ) : ListWidget | undefined {
59+ get lastFocusedList ( ) : WorkbenchListWidget | undefined {
5960 return this . _lastFocusedWidget ;
6061 }
6162
6263 constructor ( @IThemeService private readonly _themeService : IThemeService ) {
6364 }
6465
65- register ( widget : ListWidget , extraContextKeys ?: ( IContextKey < boolean > ) [ ] ) : IDisposable {
66+ register ( widget : WorkbenchListWidget , extraContextKeys ?: ( IContextKey < boolean > ) [ ] ) : IDisposable {
6667 if ( ! this . _hasCreatedStyleController ) {
6768 this . _hasCreatedStyleController = true ;
6869 // create a shared default tree style sheet for performance reasons
@@ -477,7 +478,7 @@ abstract class ResourceNavigator<T> extends Disposable {
477478 ! ! ( < SelectionKeyboardEvent > browserEvent ) . preserveFocus :
478479 true ;
479480
480- this . open ( preserveFocus , false , false , browserEvent ) ;
481+ this . _open ( preserveFocus , false , false , browserEvent ) ;
481482 }
482483 }
483484
@@ -497,7 +498,7 @@ abstract class ResourceNavigator<T> extends Disposable {
497498
498499 if ( this . openOnSingleClick || isDoubleClick || isKeyboardEvent ) {
499500 const sideBySide = browserEvent instanceof MouseEvent && ( browserEvent . ctrlKey || browserEvent . metaKey || browserEvent . altKey ) ;
500- this . open ( preserveFocus , isDoubleClick || isMiddleClick , sideBySide , browserEvent ) ;
501+ this . _open ( preserveFocus , isDoubleClick || isMiddleClick , sideBySide , browserEvent ) ;
501502 }
502503 }
503504
@@ -507,10 +508,10 @@ abstract class ResourceNavigator<T> extends Disposable {
507508 }
508509
509510 const sideBySide = ( browserEvent . ctrlKey || browserEvent . metaKey || browserEvent . altKey ) ;
510- this . open ( true , true , sideBySide , browserEvent ) ;
511+ this . _open ( true , true , sideBySide , browserEvent ) ;
511512 }
512513
513- private open ( preserveFocus : boolean , pinned : boolean , sideBySide : boolean , browserEvent ?: UIEvent ) : void {
514+ private _open ( preserveFocus : boolean , pinned : boolean , sideBySide : boolean , browserEvent ?: UIEvent ) : void {
514515 this . _onDidOpen . fire ( {
515516 editorOptions : {
516517 preserveFocus,
@@ -522,6 +523,11 @@ abstract class ResourceNavigator<T> extends Disposable {
522523 browserEvent
523524 } ) ;
524525 }
526+
527+ // hack for References Widget: pressing Enter on already selected tree element
528+ open ( browserEvent ?: UIEvent ) : void {
529+ this . _open ( ( browserEvent as any ) ?. preserveFocus || false , true , false , browserEvent ) ;
530+ }
525531}
526532
527533export class ListResourceNavigator < T > extends ResourceNavigator < number > {
@@ -594,6 +600,10 @@ export class WorkbenchObjectTree<T extends NonNullable<any>, TFilterData = void>
594600 this . internals = new WorkbenchTreeInternals ( this , options , getAutomaticKeyboardNavigation , options . overrideStyles , contextKeyService , listService , themeService , configurationService , accessibilityService ) ;
595601 this . disposables . add ( this . internals ) ;
596602 }
603+
604+ open ( browserEvent ?: UIEvent ) : void {
605+ this . internals . open ( browserEvent ) ;
606+ }
597607}
598608
599609export interface IWorkbenchCompressibleObjectTreeOptionsUpdate extends ICompressibleObjectTreeOptionsUpdate {
@@ -638,6 +648,10 @@ export class WorkbenchCompressibleObjectTree<T extends NonNullable<any>, TFilter
638648 this . internals . updateStyleOverrides ( options . overrideStyles ) ;
639649 }
640650 }
651+
652+ open ( browserEvent ?: UIEvent ) : void {
653+ this . internals . open ( browserEvent ) ;
654+ }
641655}
642656
643657export interface IWorkbenchDataTreeOptionsUpdate extends IAbstractTreeOptionsUpdate {
@@ -683,6 +697,10 @@ export class WorkbenchDataTree<TInput, T, TFilterData = void> extends DataTree<T
683697 this . internals . updateStyleOverrides ( options . overrideStyles ) ;
684698 }
685699 }
700+
701+ open ( browserEvent ?: UIEvent ) : void {
702+ this . internals . open ( browserEvent ) ;
703+ }
686704}
687705
688706export interface IWorkbenchAsyncDataTreeOptionsUpdate extends IAsyncDataTreeOptionsUpdate {
@@ -728,6 +746,10 @@ export class WorkbenchAsyncDataTree<TInput, T, TFilterData = void> extends Async
728746 this . internals . updateStyleOverrides ( options . overrideStyles ) ;
729747 }
730748 }
749+
750+ open ( browserEvent ?: UIEvent ) : void {
751+ this . internals . open ( browserEvent ) ;
752+ }
731753}
732754
733755export interface IWorkbenchCompressibleAsyncDataTreeOptions < T , TFilterData > extends ICompressibleAsyncDataTreeOptions < T , TFilterData > , IResourceNavigatorOptions {
@@ -763,6 +785,10 @@ export class WorkbenchCompressibleAsyncDataTree<TInput, T, TFilterData = void> e
763785 this . internals = new WorkbenchTreeInternals ( this , options , getAutomaticKeyboardNavigation , options . overrideStyles , contextKeyService , listService , themeService , configurationService , accessibilityService ) ;
764786 this . disposables . add ( this . internals ) ;
765787 }
788+
789+ open ( browserEvent ?: UIEvent ) : void {
790+ this . internals . open ( browserEvent ) ;
791+ }
766792}
767793
768794function workbenchTreeDataPreamble < T , TFilterData , TOptions extends IAbstractTreeOptions < T , TFilterData > | IAsyncDataTreeOptions < T , TFilterData > > (
@@ -935,6 +961,10 @@ class WorkbenchTreeInternals<TInput, T, TFilterData> {
935961 this . styler = overrideStyles ? attachListStyler ( this . tree , this . themeService , overrideStyles ) : Disposable . None ;
936962 }
937963
964+ open ( browserEvent ?: UIEvent ) : void {
965+ this . navigator . open ( browserEvent ) ;
966+ }
967+
938968 dispose ( ) : void {
939969 this . disposables = dispose ( this . disposables ) ;
940970 dispose ( this . styler ) ;
0 commit comments