diff --git a/IDE/src/Settings.bf b/IDE/src/Settings.bf index aee80420..5e4ab36e 100644 --- a/IDE/src/Settings.bf +++ b/IDE/src/Settings.bf @@ -953,7 +953,7 @@ namespace IDE curCmdMap = (*valuePtr) as CommandMap; if (curCmdMap == null) { - curCmdMap.FailValues.Add(ideCommand); + gApp.OutputLineSmart("ERROR: The same key is bound for '{0}' and as part of a key chord", entry.mCommand); break; } } diff --git a/IDE/src/ui/SettingsDialog.bf b/IDE/src/ui/SettingsDialog.bf index 8c4e9c93..e7e1da9a 100644 --- a/IDE/src/ui/SettingsDialog.bf +++ b/IDE/src/ui/SettingsDialog.bf @@ -221,6 +221,30 @@ namespace IDE.ui } } + // Do chord prefix search + for (var propEntries in mPropPage.mPropEntries.Values) + { + var propEntry = propEntries[0]; + let keyEntry = (KeyEntry)propEntry.mTarget; + let origKeys = propEntry.mCurValue.Get>(); + var keys = scope List(origKeys.GetEnumerator()); + while (keys.Count > 1) + { + keys.PopBack(); + let keyEntryStr = scope String(); + KeyState.ToString(keys, keyEntryStr); + keyEntryStr.Append(" "); + CommandContextToString(keyEntry.mContextFlags, keyEntryStr); + + if (mappedEntries.TryGet(keyEntryStr, var keyPtr, var valuePtr)) + { + let other = valuePtr; + other.mHasConflict = true; + keyEntry.mHasConflict = true; + } + } + } + for (let keyEntryStr in mappedEntries.Keys) delete keyEntryStr;