mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-21 09:27:59 +02:00
Better key chord matching
This commit is contained in:
parent
2e4792d51e
commit
5f5c752f5d
1 changed files with 87 additions and 67 deletions
|
@ -7429,19 +7429,38 @@ namespace IDE
|
|||
}
|
||||
}
|
||||
|
||||
if ((mKeyChordState != null) && (evt.mKeyCode.IsModifier))
|
||||
{
|
||||
// Ignore
|
||||
}
|
||||
else
|
||||
{
|
||||
var keyState = scope KeyState();
|
||||
keyState.mKeyCode = evt.mKeyCode;
|
||||
keyState.mKeyFlags = evt.mKeyFlags;
|
||||
|
||||
var curKeyMap = mCommands.mKeyMap;
|
||||
|
||||
bool hadChordState = mKeyChordState != null;
|
||||
if (mKeyChordState != null)
|
||||
curKeyMap = mKeyChordState.mCommandMap;
|
||||
DeleteAndNullify!(mKeyChordState);
|
||||
var prevKeyChordState = mKeyChordState;
|
||||
defer delete prevKeyChordState;
|
||||
mKeyChordState = null;
|
||||
|
||||
KeyState matchedKey;
|
||||
IDECommandBase commandBase;
|
||||
if (curKeyMap.mMap.TryGet(keyState, out matchedKey, out commandBase))
|
||||
|
||||
bool hadMatch = curKeyMap.mMap.TryGet(keyState, out matchedKey, out commandBase);
|
||||
if ((!hadMatch) && (prevKeyChordState != null))
|
||||
{
|
||||
// If we have a "Ctrl+A, Ctrl+B" style sequence then also try to match that against "Ctrl+A, B"
|
||||
KeyState rawKeyState = keyState;
|
||||
rawKeyState.mKeyFlags &= ~prevKeyChordState.mKeyState.mKeyFlags;
|
||||
hadMatch = curKeyMap.mMap.TryGet(rawKeyState, out matchedKey, out commandBase);
|
||||
}
|
||||
|
||||
if (hadMatch)
|
||||
{
|
||||
if (var commandMap = commandBase as CommandMap)
|
||||
{
|
||||
|
@ -7497,7 +7516,7 @@ namespace IDE
|
|||
}
|
||||
}
|
||||
}
|
||||
else if (!evt.mKeyCode.IsModifier)
|
||||
else
|
||||
{
|
||||
// Not found
|
||||
if (hadChordState)
|
||||
|
@ -7507,6 +7526,7 @@ namespace IDE
|
|||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SourceViewPanel sourceViewPanel = null;
|
||||
Widget focusWidget = window.mFocusWidget;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue