Avoid re-building context result is unchanged

This commit is contained in:
Garulf 2024-01-23 19:51:25 -05:00
parent acebf04c4c
commit 93ce99f8d9

View file

@ -34,6 +34,8 @@ namespace Flow.Launcher.ViewModel
private bool _isQueryRunning;
private Query _lastQuery;
private Result lastContextMenuResult = new Result();
private List<Result> lastContextMenuResults = new List<Result>();
private string _queryTextBeforeLeaveResults;
private readonly FlowLauncherJsonStorage<History> _historyItemsStorage;
@ -650,9 +652,34 @@ namespace Flow.Launcher.ViewModel
if (selected != null) // SelectedItem returns null if selection is empty.
{
var results = PluginManager.GetContextMenusForPlugin(selected);
results.Add(ContextMenuTopMost(selected));
results.Add(ContextMenuPluginInfo(selected.PluginID));
List<Result> results;
if (selected == lastContextMenuResult)
{
// Use copy to keep the original results unchanged
results = lastContextMenuResults.ConvertAll(result => new Result
{
Title = result.Title,
SubTitle = result.SubTitle,
IcoPath = result.IcoPath,
PluginDirectory = result.PluginDirectory,
Action = result.Action,
ContextData = result.ContextData,
Glyph = result.Glyph,
OriginQuery = result.OriginQuery,
Score = result.Score,
AsyncAction = result.AsyncAction,
});
}
else
{
results = PluginManager.GetContextMenusForPlugin(selected);
lastContextMenuResults = results;
lastContextMenuResult = selected;
results.Add(ContextMenuTopMost(selected));
results.Add(ContextMenuPluginInfo(selected.PluginID));
}
if (!string.IsNullOrEmpty(query))
{