@@ -24,6 +24,7 @@ import { IMarkdownString } from 'vs/base/common/htmlContent';
2424import { CancellationToken , CancellationTokenSource } from 'vs/base/common/cancellation' ;
2525import { ITreeViewsDnDService , TreeViewsDnDService } from 'vs/editor/common/services/treeViewsDnd' ;
2626import { IAccessibilityInformation } from 'vs/platform/accessibility/common/accessibility' ;
27+ import { checkProposedApiEnabled } from 'vs/workbench/services/extensions/common/extensions' ;
2728
2829type TreeItemHandle = string ;
2930
@@ -99,6 +100,14 @@ export class ExtHostTreeViews implements ExtHostTreeViewsShape {
99100 get onDidExpandElement ( ) { return treeView . onDidExpandElement ; } ,
100101 get selection ( ) { return treeView . selectedElements ; } ,
101102 get onDidChangeSelection ( ) { return treeView . onDidChangeSelection ; } ,
103+ get activeItem ( ) {
104+ checkProposedApiEnabled ( extension , 'treeViewActiveItem' ) ;
105+ return treeView . focusedElement ;
106+ } ,
107+ get onDidChangeActiveItem ( ) {
108+ checkProposedApiEnabled ( extension , 'treeViewActiveItem' ) ;
109+ return treeView . onDidChangeActiveItem ;
110+ } ,
102111 get visible ( ) { return treeView . visible ; } ,
103112 get onDidChangeVisibility ( ) { return treeView . onDidChangeVisibility ; } ,
104113 get onDidChangeCheckboxState ( ) {
@@ -222,20 +231,12 @@ export class ExtHostTreeViews implements ExtHostTreeViewsShape {
222231 treeView . setExpanded ( treeItemHandle , expanded ) ;
223232 }
224233
225- $setSelection ( treeViewId : string , treeItemHandles : string [ ] ) : void {
234+ $setSelectionAndFocus ( treeViewId : string , selectedHandles : string [ ] , focusedHandle : string ) {
226235 const treeView = this . treeViews . get ( treeViewId ) ;
227236 if ( ! treeView ) {
228237 throw new NoTreeViewError ( treeViewId ) ;
229238 }
230- treeView . setSelection ( treeItemHandles ) ;
231- }
232-
233- $setFocus ( treeViewId : string , treeItemHandles : string ) {
234- const treeView = this . treeViews . get ( treeViewId ) ;
235- if ( ! treeView ) {
236- throw new NoTreeViewError ( treeViewId ) ;
237- }
238- treeView . setFocus ( treeItemHandles ) ;
239+ treeView . setSelectionAndFocus ( selectedHandles , focusedHandle ) ;
239240 }
240241
241242 $setVisible ( treeViewId : string , isVisible : boolean ) : void {
@@ -313,6 +314,9 @@ class ExtHostTreeView<T> extends Disposable {
313314 private _onDidChangeSelection : Emitter < vscode . TreeViewSelectionChangeEvent < T > > = this . _register ( new Emitter < vscode . TreeViewSelectionChangeEvent < T > > ( ) ) ;
314315 readonly onDidChangeSelection : Event < vscode . TreeViewSelectionChangeEvent < T > > = this . _onDidChangeSelection . event ;
315316
317+ private _onDidChangeActiveItem : Emitter < vscode . TreeViewActiveItemChangeEvent < T > > = this . _register ( new Emitter < vscode . TreeViewActiveItemChangeEvent < T > > ( ) ) ;
318+ readonly onDidChangeActiveItem : Event < vscode . TreeViewActiveItemChangeEvent < T > > = this . _onDidChangeActiveItem . event ;
319+
316320 private _onDidChangeVisibility : Emitter < vscode . TreeViewVisibilityChangeEvent > = this . _register ( new Emitter < vscode . TreeViewVisibilityChangeEvent > ( ) ) ;
317321 readonly onDidChangeVisibility : Event < vscode . TreeViewVisibilityChangeEvent > = this . _onDidChangeVisibility . event ;
318322
@@ -479,15 +483,20 @@ class ExtHostTreeView<T> extends Disposable {
479483 }
480484 }
481485
482- setSelection ( treeItemHandles : TreeItemHandle [ ] ) : void {
483- if ( ! equals ( this . _selectedHandles , treeItemHandles ) ) {
484- this . _selectedHandles = treeItemHandles ;
486+ setSelectionAndFocus ( selectedHandles : TreeItemHandle [ ] , focusedHandle : string ) : void {
487+ const changedSelection = ! equals ( this . _selectedHandles , selectedHandles ) ;
488+ this . _selectedHandles = selectedHandles ;
489+
490+ const changedFocus = this . _focusedHandle !== focusedHandle ;
491+ this . _focusedHandle = focusedHandle ;
492+
493+ if ( changedSelection ) {
485494 this . _onDidChangeSelection . fire ( Object . freeze ( { selection : this . selectedElements } ) ) ;
486495 }
487- }
488496
489- setFocus ( treeItemHandle : TreeItemHandle ) {
490- this . _focusedHandle = treeItemHandle ;
497+ if ( changedFocus ) {
498+ this . _onDidChangeActiveItem . fire ( Object . freeze ( { activeItem : this . focusedElement } ) ) ;
499+ }
491500 }
492501
493502 setVisible ( visible : boolean ) : void {
0 commit comments