diff --git a/IDE/src/Commands.bf b/IDE/src/Commands.bf index 72ae06ba..c3422655 100644 --- a/IDE/src/Commands.bf +++ b/IDE/src/Commands.bf @@ -9,7 +9,7 @@ namespace IDE { public KeyCode mKeyCode; public KeyFlags mKeyFlags; - + public int GetHashCode() { return (int)mKeyCode | (int)mKeyFlags << 16; @@ -121,10 +121,21 @@ namespace IDE class CommandMap : IDECommandBase { public Dictionary mMap = new .() ~ delete _; + public List mFailValues ~ delete _; + + public List FailValues + { + get + { + if (mFailValues == null) + mFailValues = new .(); + return mFailValues; + } + } public void Clear() { - for (let val in mMap.Values) + void Release(IDECommandBase val) { if (var cmdMap = val as CommandMap) delete cmdMap; @@ -136,6 +147,15 @@ namespace IDE ideCommand.mNext = null; } } + + for (let val in mMap.Values) + Release(val); + if (mFailValues != null) + { + for (var val in mFailValues) + Release(val); + mFailValues.Clear(); + } mMap.Clear(); } diff --git a/IDE/src/Settings.bf b/IDE/src/Settings.bf index 5ef7348f..30e51db1 100644 --- a/IDE/src/Settings.bf +++ b/IDE/src/Settings.bf @@ -894,7 +894,10 @@ namespace IDE { curCmdMap = (*valuePtr) as CommandMap; if (curCmdMap == null) + { + curCmdMap.FailValues.Add(ideCommand); break; + } } else { @@ -907,7 +910,10 @@ namespace IDE if (checkPrevCmd.mContextFlags == ideCommand.mContextFlags) gApp.OutputLineSmart("ERROR: The same key is bound for '{0}' and '{1}'", checkPrevCmd.mName, entry.mCommand); if (checkPrevCmd.mNext == null) + { + curCmdMap.FailValues.Add(ideCommand); break; + } checkPrevCmd = checkPrevCmd.mNext; } checkPrevCmd.mNext = ideCommand;