1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 19:48:20 +02:00

Fixed duplicate hotkey issue with newly-added commands

This commit is contained in:
Brian Fiete 2025-05-26 18:32:48 +02:00
parent adb7a2bdef
commit a8b19b0d81
4 changed files with 61 additions and 29 deletions

View file

@ -33,9 +33,9 @@ namespace IDE
mKeyCode.ToString(strBuffer); mKeyCode.ToString(strBuffer);
} }
public static void ToString(List<KeyState> keyStates, String strBuffer) public static void ToString(Span<KeyState> keyStates, String strBuffer)
{ {
for (int i < keyStates.Count) for (int i < keyStates.Length)
{ {
if (i > 0) if (i > 0)
strBuffer.Append(", "); strBuffer.Append(", ");
@ -105,10 +105,28 @@ namespace IDE
{ {
public enum ContextFlags public enum ContextFlags
{ {
None = 0, case None = 0,
MainWindow = 1, MainWindow = 1,
WorkWindow = 2, WorkWindow = 2,
Editor = 4, Editor = 4;
public void ContextToString(String str)
{
bool isFirst = true;
void AddFlagStr(StringView flagStr)
{
if (isFirst)
{
str.Append(", ");
isFirst = false;
}
str.Append(flagStr);
}
if (this.HasFlag(.Editor))
AddFlagStr("Editor");
}
} }
public String mName ~ delete _; public String mName ~ delete _;

View file

@ -1095,6 +1095,35 @@ namespace IDE
List<String> allocatedStrs = scope .(); List<String> allocatedStrs = scope .();
defer { ClearAndDeleteItems(allocatedStrs); } defer { ClearAndDeleteItems(allocatedStrs); }
Dictionary<String, Entry> mappedEntries = scope .();
void AddEntry(List<Entry> newEntries, Entry entry, bool isNew)
{
newEntries.Add(entry);
// Delete previous command bindings when we are adding new entries
let keyEntryStr = scope String();
KeyState.ToString(entry.mKeys, keyEntryStr);
//keyEntryStr.Append(" ");
//entry.mContextFlags.To keyEntryStr);
String* keyPtr;
Entry* valuePtr;
if (mappedEntries.TryAdd(keyEntryStr, out keyPtr, out valuePtr))
{
*keyPtr = new String(keyEntryStr);
*valuePtr = entry;
}
else
{
if (isNew)
{
newEntries.Remove(*valuePtr);
delete *valuePtr;
}
}
}
List<Entry> newEntries = new .(); List<Entry> newEntries = new .();
for (let cmdStr in sd.Enumerate()) for (let cmdStr in sd.Enumerate())
{ {
@ -1123,20 +1152,23 @@ namespace IDE
keyList.CopyTo(keyArr); keyList.CopyTo(keyArr);
entry.mKeys = keyArr; entry.mKeys = keyArr;
newEntries.Add(entry);
usedCommands.Add(entry.mCommand); usedCommands.Add(entry.mCommand);
AddEntry(newEntries, entry, false);
} }
for (var entry in mEntries) for (var entry in mEntries)
{ {
if (usedCommands.Contains(entry.mCommand)) if (usedCommands.Contains(entry.mCommand))
continue; continue;
newEntries.Add(entry);
mEntries[@entry.Index] = null; mEntries[@entry.Index] = null;
AddEntry(newEntries, entry, true);
} }
DeleteContainerAndItems!(mEntries); DeleteContainerAndItems!(mEntries);
mEntries = newEntries; mEntries = newEntries;
for (let keyEntryStr in mappedEntries.Keys)
delete keyEntryStr;
} }
} }

View file

@ -186,24 +186,6 @@ namespace IDE.ui
category.Open(true, true); category.Open(true, true);
} }
void CommandContextToString(IDECommand.ContextFlags contextFlags, String str)
{
bool isFirst = true;
void AddFlagStr(StringView flagStr)
{
if (isFirst)
{
str.Append(", ");
isFirst = false;
}
str.Append(flagStr);
}
if (contextFlags.HasFlag(.Editor))
AddFlagStr("Editor");
}
void UpdateKeyStates() void UpdateKeyStates()
{ {
Debug.Assert((CategoryType)mPropPage.mCategoryType == .Keys); Debug.Assert((CategoryType)mPropPage.mCategoryType == .Keys);
@ -223,7 +205,7 @@ namespace IDE.ui
let keyEntryStr = new String(); let keyEntryStr = new String();
KeyState.ToString(keys, keyEntryStr); KeyState.ToString(keys, keyEntryStr);
keyEntryStr.Append(" "); keyEntryStr.Append(" ");
CommandContextToString(keyEntry.mContextFlags, keyEntryStr); keyEntry.mContextFlags.ContextToString(keyEntryStr);
String* keyPtr; String* keyPtr;
KeyEntry* valuePtr; KeyEntry* valuePtr;
@ -253,7 +235,7 @@ namespace IDE.ui
let keyEntryStr = scope String(); let keyEntryStr = scope String();
KeyState.ToString(keys, keyEntryStr); KeyState.ToString(keys, keyEntryStr);
keyEntryStr.Append(" "); keyEntryStr.Append(" ");
CommandContextToString(keyEntry.mContextFlags, keyEntryStr); keyEntry.mContextFlags.ContextToString(keyEntryStr);
if (mappedEntries.TryGet(keyEntryStr, var keyPtr, var valuePtr)) if (mappedEntries.TryGet(keyEntryStr, var keyPtr, var valuePtr))
{ {

View file

@ -193,7 +193,7 @@ namespace IDE.ui
{ {
if (keyEvent.mKeyCode == .Escape) if (keyEvent.mKeyCode == .Escape)
{ {
if (mPanel.mQuickFind.mWidgetWindow != null) if (mPanel.mQuickFind?.mWidgetWindow != null)
{ {
mPanel.mQuickFind.Close(); mPanel.mQuickFind.Close();
return; return;