Skip to content

Commit 097bc69

Browse files
authored
Merge pull request #2506 from Flow-Launcher/fix-slow-context-menu-search
Speed up context menu search
2 parents acebf04 + b25c160 commit 097bc69

File tree

1 file changed

+32
-3
lines changed

1 file changed

+32
-3
lines changed

Flow.Launcher/ViewModel/MainViewModel.cs

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ public partial class MainViewModel : BaseModel, ISavable
3434

3535
private bool _isQueryRunning;
3636
private Query _lastQuery;
37+
private Result lastContextMenuResult = new Result();
38+
private List<Result> lastContextMenuResults = new List<Result>();
3739
private string _queryTextBeforeLeaveResults;
3840

3941
private readonly FlowLauncherJsonStorage<History> _historyItemsStorage;
@@ -650,9 +652,34 @@ private void QueryContextMenu()
650652

651653
if (selected != null) // SelectedItem returns null if selection is empty.
652654
{
653-
var results = PluginManager.GetContextMenusForPlugin(selected);
654-
results.Add(ContextMenuTopMost(selected));
655-
results.Add(ContextMenuPluginInfo(selected.PluginID));
655+
List<Result> results;
656+
if (selected == lastContextMenuResult)
657+
{
658+
// Use copy to keep the original results unchanged
659+
results = lastContextMenuResults.ConvertAll(result => new Result
660+
{
661+
Title = result.Title,
662+
SubTitle = result.SubTitle,
663+
IcoPath = result.IcoPath,
664+
PluginDirectory = result.PluginDirectory,
665+
Action = result.Action,
666+
ContextData = result.ContextData,
667+
Glyph = result.Glyph,
668+
OriginQuery = result.OriginQuery,
669+
Score = result.Score,
670+
AsyncAction = result.AsyncAction,
671+
});
672+
}
673+
else
674+
{
675+
results = PluginManager.GetContextMenusForPlugin(selected);
676+
lastContextMenuResults = results;
677+
lastContextMenuResult = selected;
678+
results.Add(ContextMenuTopMost(selected));
679+
results.Add(ContextMenuPluginInfo(selected.PluginID));
680+
}
681+
682+
656683

657684
if (!string.IsNullOrEmpty(query))
658685
{
@@ -1025,6 +1052,8 @@ public async void Hide()
10251052
{
10261053
// Trick for no delay
10271054
MainWindowOpacity = 0;
1055+
lastContextMenuResult = new Result();
1056+
lastContextMenuResults = new List<Result>();
10281057

10291058
if (!SelectedIsFromQueryResults())
10301059
{

0 commit comments

Comments
 (0)