public void FindShortcutEntries(List <KeyCombination> combinationSequence, IContextManager contextManager, List <ShortcutEntry> outputShortcuts) { outputShortcuts.Clear(); List <ShortcutEntry> entries = GetShortcutEntriesForPrimaryKey(combinationSequence); if (entries == null) { return; } foreach (var entry in entries) { if (entry.StartsWith(combinationSequence) && ShortcutEntrySatisfiesContextManager(contextManager, entry) && entry.context != typeof(ContextManager.GlobalContext)) { outputShortcuts.Add(entry); } } if (outputShortcuts.Count == 0) { foreach (var entry in entries) { if (entry.StartsWith(combinationSequence) && ShortcutEntrySatisfiesContextManager(contextManager, entry) && entry.context == typeof(ContextManager.GlobalContext)) { outputShortcuts.Add(entry); } } } bool tagMatch = false; foreach (var entry in outputShortcuts) { tagMatch |= contextManager.HasTag(entry.tag); } if (tagMatch) { for (int i = outputShortcuts.Count - 1; i >= 0; i--) { if (contextManager.HasTag(outputShortcuts[i].tag)) { continue; } outputShortcuts.RemoveAt(i); } } else { for (int i = outputShortcuts.Count - 1; i >= 0; i--) { if (outputShortcuts[i].tag == null) { continue; } outputShortcuts.RemoveAt(i); } } }