Fix results context menu display issue

This commit is contained in:
Jack251970 2025-05-13 10:36:46 +08:00
parent d2e63ab437
commit 58f80996b7
3 changed files with 23 additions and 7 deletions

View file

@ -479,7 +479,7 @@ public partial class SettingsPaneThemeViewModel : BaseModel
)
}
};
var vm = new ResultsViewModel(Settings);
var vm = new ResultsViewModel(Settings, null);
vm.AddResults(results, "PREVIEW");
PreviewResults = vm;
}

View file

@ -148,19 +148,19 @@ namespace Flow.Launcher.ViewModel
_userSelectedRecord = _userSelectedRecordStorage.Load();
_topMostRecord = _topMostRecordStorage.Load();
ContextMenu = new ResultsViewModel(Settings)
ContextMenu = new ResultsViewModel(Settings, this)
{
LeftClickResultCommand = OpenResultCommand,
RightClickResultCommand = LoadContextMenuCommand,
IsPreviewOn = Settings.AlwaysPreview
};
Results = new ResultsViewModel(Settings)
Results = new ResultsViewModel(Settings, this)
{
LeftClickResultCommand = OpenResultCommand,
RightClickResultCommand = LoadContextMenuCommand,
IsPreviewOn = Settings.AlwaysPreview
};
History = new ResultsViewModel(Settings)
History = new ResultsViewModel(Settings, this)
{
LeftClickResultCommand = OpenResultCommand,
RightClickResultCommand = LoadContextMenuCommand,
@ -1662,6 +1662,12 @@ namespace Flow.Launcher.ViewModel
return selected;
}
internal bool ResultsSelected(ResultsViewModel results)
{
var selected = SelectedResults == results;
return selected;
}
#endregion
#region Hotkey

View file

@ -21,6 +21,7 @@ namespace Flow.Launcher.ViewModel
private readonly object _collectionLock = new();
private readonly Settings _settings;
private readonly MainViewModel _mainVM;
private int MaxResults => _settings?.MaxResultsToShow ?? 6;
public ResultsViewModel()
@ -29,9 +30,10 @@ namespace Flow.Launcher.ViewModel
BindingOperations.EnableCollectionSynchronization(Results, _collectionLock);
}
public ResultsViewModel(Settings settings) : this()
public ResultsViewModel(Settings settings, MainViewModel mainVM) : this()
{
_settings = settings;
_mainVM = mainVM;
_settings.PropertyChanged += (s, e) =>
{
switch (e.PropertyName)
@ -179,6 +181,7 @@ namespace Flow.Launcher.ViewModel
UpdateResults(newResults);
}
/// <summary>
/// To avoid deadlock, this method should not called from main thread
/// </summary>
@ -202,11 +205,18 @@ namespace Flow.Launcher.ViewModel
SelectedItem = Results[0];
}
if (token.IsCancellationRequested)
return;
switch (Visibility)
{
case Visibility.Collapsed when Results.Count > 0:
SelectedIndex = 0;
Visibility = Visibility.Visible;
// Show it only if the results are selected
if (_mainVM == null || _mainVM.ResultsSelected(this))
{
SelectedIndex = 0;
Visibility = Visibility.Visible;
}
break;
case Visibility.Visible when Results.Count == 0:
Visibility = Visibility.Collapsed;