@@ -49,7 +49,8 @@ public partial class MainViewModel : BaseModel, ISavable, IDisposable
49
49
private ChannelWriter < ResultsForUpdate > _resultsUpdateChannelWriter ;
50
50
private Task _resultsViewUpdateTask ;
51
51
52
- private readonly IReadOnlyList < Result > _emptyResult = new List < Result > ( ) ;
52
+ private readonly ResultsViewModel _results , _contextMenu ;
53
+ private readonly IReadOnlyList < Result > _emptyResult = [ ] ;
53
54
54
55
#endregion
55
56
@@ -128,32 +129,41 @@ public MainViewModel()
128
129
_topMostRecord = new FlowLauncherJsonStorageTopMostRecord ( ) ;
129
130
_userSelectedRecord = _userSelectedRecordStorage . Load ( ) ;
130
131
131
- ContextMenu = new ResultsViewModel ( Settings , this )
132
+ _contextMenu = new ResultsViewModel ( Settings , this )
132
133
{
133
134
LeftClickResultCommand = OpenResultCommand ,
134
135
RightClickResultCommand = LoadContextMenuCommand ,
135
136
IsPreviewOn = Settings . AlwaysPreview
136
137
} ;
137
- Results = new ResultsViewModel ( Settings , this )
138
+ _results = new ResultsViewModel ( Settings , this )
138
139
{
139
140
LeftClickResultCommand = OpenResultCommand ,
140
141
RightClickResultCommand = LoadContextMenuCommand ,
141
142
IsPreviewOn = Settings . AlwaysPreview
142
143
} ;
143
- _selectedResults = Results ;
144
+ _selectedResults = _results ;
144
145
145
- Results . PropertyChanged += ( o , args ) =>
146
+ _results . PropertyChanged += ( o , args ) =>
146
147
{
147
148
switch ( args . PropertyName )
148
149
{
149
- case nameof ( Results . SelectedItem ) :
150
+ case nameof ( _results . SelectedItem ) :
150
151
_selectedItemFromQueryResults = true ;
151
- PreviewSelectedItem = Results . SelectedItem ;
152
+ PreviewSelectedItem = _results . SelectedItem ;
152
153
_ = UpdatePreviewAsync ( ) ;
153
154
break ;
154
155
}
155
156
} ;
156
157
158
+ _results . Results . CollectionChanged += ( s , e ) =>
159
+ {
160
+ OnPropertyChanged ( nameof ( MiddleSeparatorVisibility ) ) ;
161
+ } ;
162
+ _contextMenu . Results . CollectionChanged += ( s , e ) =>
163
+ {
164
+ OnPropertyChanged ( nameof ( MiddleSeparatorVisibility ) ) ;
165
+ } ;
166
+
157
167
RegisterViewUpdate ( ) ;
158
168
159
169
ThemeManager . Current . ActualApplicationThemeChanged += ThemeManager_ActualApplicationThemeChanged ;
@@ -297,11 +307,11 @@ private void LoadContextMenu()
297
307
// When switch to ContextMenu from QueryResults, but no item being chosen, should do nothing
298
308
// i.e. Shift+Enter/Ctrl+O right after Alt + Space should do nothing
299
309
if ( SelectedResults . SelectedItem != null )
300
- SelectedResults = ContextMenu ;
310
+ SelectedResults = _contextMenu ;
301
311
}
302
312
else
303
313
{
304
- SelectedResults = Results ;
314
+ SelectedResults = _results ;
305
315
}
306
316
}
307
317
@@ -446,7 +456,7 @@ private void SelectPrevItem()
446
456
{
447
457
if ( QueryResultsSelected ( ) // Results selected
448
458
&& string . IsNullOrEmpty ( QueryText ) // No input
449
- && Results . Visibility != Visibility . Visible ) // No items in result list, e.g. when home page is off and no query text is entered, therefore the view is collapsed.
459
+ && _results . Visibility != Visibility . Visible ) // No items in result list, e.g. when home page is off and no query text is entered, therefore the view is collapsed.
450
460
{
451
461
452
462
}
@@ -467,7 +477,7 @@ private void Esc()
467
477
{
468
478
if ( ! QueryResultsSelected ( ) )
469
479
{
470
- SelectedResults = Results ;
480
+ SelectedResults = _results ;
471
481
}
472
482
else
473
483
{
@@ -479,7 +489,7 @@ public void BackToQueryResults()
479
489
{
480
490
if ( ! QueryResultsSelected ( ) )
481
491
{
482
- SelectedResults = Results ;
492
+ SelectedResults = _results ;
483
493
}
484
494
}
485
495
@@ -492,7 +502,7 @@ public void ToggleGameMode()
492
502
[ RelayCommand ]
493
503
public void CopyAlternative ( )
494
504
{
495
- var result = Results . SelectedItem ? . Result ? . CopyText ;
505
+ var result = _results . SelectedItem ? . Result ? . CopyText ;
496
506
497
507
if ( result != null )
498
508
{
@@ -503,13 +513,8 @@ public void CopyAlternative()
503
513
#endregion
504
514
505
515
#region ViewModel Properties
506
-
507
516
public Settings Settings { get ; }
508
517
509
- public ResultsViewModel Results { get ; private set ; }
510
-
511
- public ResultsViewModel ContextMenu { get ; private set ; }
512
-
513
518
public bool GameModeStatus { get ; set ; } = false ;
514
519
515
520
private string _queryText ;
@@ -639,18 +644,18 @@ private async Task ChangeQueryTextAsync(string queryText, bool isReQuery = false
639
644
640
645
private ResultsViewModel _selectedResults ;
641
646
642
- private ResultsViewModel SelectedResults
647
+ public ResultsViewModel SelectedResults
643
648
{
644
649
get => _selectedResults ;
645
- set
650
+ private set
646
651
{
647
652
var isReturningFromQueryResults = QueryResultsSelected ( ) ;
648
653
var isReturningFromContextMenu = ContextMenuSelected ( ) ;
649
654
_selectedResults = value ;
650
655
if ( QueryResultsSelected ( ) )
651
656
{
652
- Results . Visibility = Visibility . Visible ;
653
- ContextMenu . Visibility = Visibility . Collapsed ;
657
+ _results . Visibility = Visibility . Visible ;
658
+ _contextMenu . Visibility = Visibility . Collapsed ;
654
659
655
660
// QueryText setter (used in ChangeQueryText) runs the query again, resetting the selected
656
661
// result from the one that was selected before going into the context menu to the first result.
@@ -672,8 +677,8 @@ private ResultsViewModel SelectedResults
672
677
}
673
678
else
674
679
{
675
- Results . Visibility = Visibility . Collapsed ;
676
- ContextMenu . Visibility = Visibility . Visible ;
680
+ _results . Visibility = Visibility . Collapsed ;
681
+ _contextMenu . Visibility = Visibility . Visible ;
677
682
_queryTextBeforeLeaveResults = QueryText ;
678
683
679
684
// Because of Fody's optimization
@@ -688,6 +693,9 @@ private ResultsViewModel SelectedResults
688
693
}
689
694
}
690
695
696
+ public Visibility MiddleSeparatorVisibility
697
+ => _selectedResults . Results . Count == 0 ? Visibility . Collapsed : Visibility . Visible ;
698
+
691
699
public Visibility MainWindowVisibility { get ; set ; }
692
700
693
701
// This is to be used for determining the visibility status of the main window instead of MainWindowVisibility
@@ -966,13 +974,13 @@ when CanExternalPreviewSelectedResult(out var path):
966
974
967
975
private bool CanExternalPreviewSelectedResult ( out string path )
968
976
{
969
- path = QueryResultsPreviewed ( ) ? Results . SelectedItem ? . Result ? . Preview . FilePath : string . Empty ;
977
+ path = QueryResultsPreviewed ( ) ? _results . SelectedItem ? . Result ? . Preview . FilePath : string . Empty ;
970
978
return ! string . IsNullOrEmpty ( path ) ;
971
979
}
972
980
973
981
private bool QueryResultsPreviewed ( )
974
982
{
975
- var previewed = PreviewSelectedItem == Results . SelectedItem ;
983
+ var previewed = PreviewSelectedItem == _results . SelectedItem ;
976
984
return previewed ;
977
985
}
978
986
@@ -1027,9 +1035,9 @@ private void QueryContextMenu()
1027
1035
{
1028
1036
const string id = "Context Menu ID" ;
1029
1037
var query = QueryText . ToLower ( ) . Trim ( ) ;
1030
- ContextMenu . Clear ( ) ;
1038
+ _contextMenu . Clear ( ) ;
1031
1039
1032
- var selected = Results . SelectedItem ? . Result ;
1040
+ var selected = _results . SelectedItem ? . Result ;
1033
1041
1034
1042
if ( selected != null ) // SelectedItem returns null if selection is empty.
1035
1043
{
@@ -1081,11 +1089,11 @@ private void QueryContextMenu()
1081
1089
r . Score = match . Score ;
1082
1090
return true ;
1083
1091
} ) . ToList ( ) ;
1084
- ContextMenu . AddResults ( filtered , id ) ;
1092
+ _contextMenu . AddResults ( filtered , id ) ;
1085
1093
}
1086
1094
else
1087
1095
{
1088
- ContextMenu . AddResults ( results , id ) ;
1096
+ _contextMenu . AddResults ( results , id ) ;
1089
1097
}
1090
1098
}
1091
1099
}
@@ -1103,8 +1111,8 @@ private async Task QueryResultsAsync(bool searchDelay, bool isReQuery = false, b
1103
1111
App . API . LogDebug ( ClassName , $ "Clear query results") ;
1104
1112
1105
1113
// Hide and clear results again because running query may show and add some results
1106
- Results . Visibility = Visibility . Collapsed ;
1107
- Results . Clear ( ) ;
1114
+ _results . Visibility = Visibility . Collapsed ;
1115
+ _results . Clear ( ) ;
1108
1116
1109
1117
// Reset plugin icon
1110
1118
PluginIconPath = null ;
@@ -1179,7 +1187,7 @@ private async Task QueryResultsAsync(bool searchDelay, bool isReQuery = false, b
1179
1187
{
1180
1188
if ( ShouldClearExistingResultsForNonQuery ( plugins ) )
1181
1189
{
1182
- Results . Clear ( ) ;
1190
+ _results . Clear ( ) ;
1183
1191
App . API . LogDebug ( ClassName , $ "Existing results are cleared for non-query") ;
1184
1192
}
1185
1193
@@ -1457,13 +1465,13 @@ private static Result ContextMenuPluginInfo(Result result)
1457
1465
1458
1466
internal bool QueryResultsSelected ( )
1459
1467
{
1460
- var selected = SelectedResults == Results ;
1468
+ var selected = SelectedResults == _results ;
1461
1469
return selected ;
1462
1470
}
1463
1471
1464
1472
private bool ContextMenuSelected ( )
1465
1473
{
1466
- var selected = SelectedResults == ContextMenu ;
1474
+ var selected = SelectedResults == _contextMenu ;
1467
1475
return selected ;
1468
1476
}
1469
1477
@@ -1654,7 +1662,7 @@ public void UpdateResultView(ICollection<ResultsForUpdate> resultsForUpdates)
1654
1662
// it should be the same for all results
1655
1663
bool reSelect = resultsForUpdates . First ( ) . ReSelectFirstResult ;
1656
1664
1657
- Results . AddResults ( resultsForUpdates , token , reSelect ) ;
1665
+ _results . AddResults ( resultsForUpdates , token , reSelect ) ;
1658
1666
}
1659
1667
1660
1668
[ System . Diagnostics . CodeAnalysis . SuppressMessage ( "Performance" , "CA1822:Mark members as static" , Justification = "<Pending>" ) ]
0 commit comments