1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-10 20:42:21 +02:00

Fixed issue clearing duplicate key binds

This commit is contained in:
Brian Fiete 2021-12-23 07:07:03 -05:00
parent 6e988b90aa
commit e2337e7ac1
2 changed files with 28 additions and 2 deletions

View file

@ -9,7 +9,7 @@ namespace IDE
{ {
public KeyCode mKeyCode; public KeyCode mKeyCode;
public KeyFlags mKeyFlags; public KeyFlags mKeyFlags;
public int GetHashCode() public int GetHashCode()
{ {
return (int)mKeyCode | (int)mKeyFlags << 16; return (int)mKeyCode | (int)mKeyFlags << 16;
@ -121,10 +121,21 @@ namespace IDE
class CommandMap : IDECommandBase class CommandMap : IDECommandBase
{ {
public Dictionary<KeyState, IDECommandBase> mMap = new .() ~ delete _; public Dictionary<KeyState, IDECommandBase> mMap = new .() ~ delete _;
public List<IDECommandBase> mFailValues ~ delete _;
public List<IDECommandBase> FailValues
{
get
{
if (mFailValues == null)
mFailValues = new .();
return mFailValues;
}
}
public void Clear() public void Clear()
{ {
for (let val in mMap.Values) void Release(IDECommandBase val)
{ {
if (var cmdMap = val as CommandMap) if (var cmdMap = val as CommandMap)
delete cmdMap; delete cmdMap;
@ -136,6 +147,15 @@ namespace IDE
ideCommand.mNext = null; 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(); mMap.Clear();
} }

View file

@ -894,7 +894,10 @@ namespace IDE
{ {
curCmdMap = (*valuePtr) as CommandMap; curCmdMap = (*valuePtr) as CommandMap;
if (curCmdMap == null) if (curCmdMap == null)
{
curCmdMap.FailValues.Add(ideCommand);
break; break;
}
} }
else else
{ {
@ -907,7 +910,10 @@ namespace IDE
if (checkPrevCmd.mContextFlags == ideCommand.mContextFlags) if (checkPrevCmd.mContextFlags == ideCommand.mContextFlags)
gApp.OutputLineSmart("ERROR: The same key is bound for '{0}' and '{1}'", checkPrevCmd.mName, entry.mCommand); gApp.OutputLineSmart("ERROR: The same key is bound for '{0}' and '{1}'", checkPrevCmd.mName, entry.mCommand);
if (checkPrevCmd.mNext == null) if (checkPrevCmd.mNext == null)
{
curCmdMap.FailValues.Add(ideCommand);
break; break;
}
checkPrevCmd = checkPrevCmd.mNext; checkPrevCmd = checkPrevCmd.mNext;
} }
checkPrevCmd.mNext = ideCommand; checkPrevCmd.mNext = ideCommand;