@@ -7,7 +7,7 @@ import * as dom from 'vs/base/browser/dom';
7
7
import { Emitter , Event } from 'vs/base/common/event' ;
8
8
import { IHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegate' ;
9
9
import { IListVirtualDelegate } from 'vs/base/browser/ui/list/list' ;
10
- import { IObjectTreeElement , ITreeNode , ITreeRenderer } from 'vs/base/browser/ui/tree/tree' ;
10
+ import { IObjectTreeElement , ITreeEvent , ITreeNode , ITreeRenderer } from 'vs/base/browser/ui/tree/tree' ;
11
11
import { localize } from 'vs/nls' ;
12
12
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation' ;
13
13
import { WorkbenchObjectTree } from 'vs/platform/list/browser/listService' ;
@@ -696,6 +696,8 @@ export class QuickInputTree extends Disposable {
696
696
private readonly _onSeparatorButtonTriggered = new Emitter < IQuickPickSeparatorButtonEvent > ( ) ;
697
697
onSeparatorButtonTriggered = this . _onSeparatorButtonTriggered . event ;
698
698
699
+ private readonly _onTriggerEmptySelectionOrFocus = new Emitter < ITreeEvent < IQuickPickElement | null > > ( ) ;
700
+
699
701
private readonly _container : HTMLElement ;
700
702
private readonly _tree : WorkbenchObjectTree < IQuickPickElement , void > ;
701
703
private readonly _separatorRenderer : QuickPickSeparatorElementRenderer ;
@@ -748,7 +750,7 @@ export class QuickInputTree extends Disposable {
748
750
?? element . separator ?. id
749
751
?? element . separator ?. label
750
752
?? '' ;
751
- }
753
+ } ,
752
754
} ,
753
755
alwaysConsumeMouseWheel : true
754
756
}
@@ -762,15 +764,15 @@ export class QuickInputTree extends Disposable {
762
764
@memoize
763
765
get onDidChangeFocus ( ) {
764
766
return Event . map (
765
- this . _tree . onDidChangeFocus ,
767
+ Event . any ( this . _tree . onDidChangeFocus , this . _onTriggerEmptySelectionOrFocus . event ) ,
766
768
e => e . elements . filter ( ( e ) : e is QuickPickItemElement => e instanceof QuickPickItemElement ) . map ( e => e . item )
767
769
) ;
768
770
}
769
771
770
772
@memoize
771
773
get onDidChangeSelection ( ) {
772
774
return Event . map (
773
- this . _tree . onDidChangeSelection ,
775
+ Event . any ( this . _tree . onDidChangeSelection , this . _onTriggerEmptySelectionOrFocus . event ) ,
774
776
e => ( {
775
777
items : e . elements . filter ( ( e ) : e is QuickPickItemElement => e instanceof QuickPickItemElement ) . map ( e => e . item ) ,
776
778
event : e . browserEvent
@@ -1504,7 +1506,15 @@ export class QuickInputTree extends Disposable {
1504
1506
} ) ;
1505
1507
}
1506
1508
}
1509
+ const before = this . _tree . getFocus ( ) . length ;
1507
1510
this . _tree . setChildren ( null , elements ) ;
1511
+ // Temporary fix until we figure out why the tree doesn't fire an event when focus & selection
1512
+ // get changed to empty arrays.
1513
+ if ( before > 0 && elements . length === 0 ) {
1514
+ this . _onTriggerEmptySelectionOrFocus . fire ( {
1515
+ elements : [ ]
1516
+ } ) ;
1517
+ }
1508
1518
this . _tree . layout ( ) ;
1509
1519
1510
1520
this . _onChangedAllVisibleChecked . fire ( this . getAllVisibleChecked ( ) ) ;
0 commit comments