custom keybinds multiple keypress fix. [add backslash to Parser] (#513)
* fixed input sending bug not properly releasing keys * updated to ovr 1.12.5 * added disable oculus api button experimental * small refactor and fix float and bool bugs * added nokeyup events to modifier keys when read in, and adjusted token send to have proper logic * fixed literal held issue * added backslash * fixed sender token parser * updated version string to dev whoops * added backslash to documentation for keyboard input
This commit is contained in:
@@ -78,6 +78,7 @@
|
|||||||
| Keypad Minus | `KPMINUS` |
|
| Keypad Minus | `KPMINUS` |
|
||||||
| Keypad Plus | `KPPLUS` |
|
| Keypad Plus | `KPPLUS` |
|
||||||
| Enter | `ENTER` |
|
| Enter | `ENTER` |
|
||||||
|
| Backslash | `BACKSLASH` |
|
||||||
|
|
||||||
|
|
||||||
### Misc symbols
|
### Misc symbols
|
||||||
|
|||||||
@@ -70,6 +70,7 @@ A token is either a modifier symbol, literal symbol, symbol sequence or space ch
|
|||||||
| Keypad Minus | `KPMINUS` |
|
| Keypad Minus | `KPMINUS` |
|
||||||
| Keypad Plus | `KPPLUS` |
|
| Keypad Plus | `KPPLUS` |
|
||||||
| Enter | `ENTER` |
|
| Enter | `ENTER` |
|
||||||
|
| Backslash | `BACKSLASH` |
|
||||||
|
|
||||||
|
|
||||||
### Misc symbols
|
### Misc symbols
|
||||||
|
|||||||
@@ -164,6 +164,10 @@ std::optional<Token> checkIfLegalCapitalLiteral( std::string input ) noexcept
|
|||||||
{
|
{
|
||||||
return Token::KEY_ENTER;
|
return Token::KEY_ENTER;
|
||||||
}
|
}
|
||||||
|
if ( input == "BACKSLASH" )
|
||||||
|
{
|
||||||
|
return Token::KEY_BACKSLASH;
|
||||||
|
}
|
||||||
|
|
||||||
return std::nullopt;
|
return std::nullopt;
|
||||||
}
|
}
|
||||||
@@ -182,6 +186,7 @@ std::vector<Token>
|
|||||||
}
|
}
|
||||||
if ( const auto c = getModifier( *ch ); c.has_value() )
|
if ( const auto c = getModifier( *ch ); c.has_value() )
|
||||||
{
|
{
|
||||||
|
tokens.push_back( Token::TOKEN_NO_KEYUP_NEXT );
|
||||||
tokens.push_back( *c );
|
tokens.push_back( *c );
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -517,6 +522,8 @@ bool isLiteral( const Token token ) noexcept
|
|||||||
return true;
|
return true;
|
||||||
case Token::KEY_ENTER:
|
case Token::KEY_ENTER:
|
||||||
return true;
|
return true;
|
||||||
|
case Token::KEY_BACKSLASH:
|
||||||
|
return true;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ enum class Token
|
|||||||
KEY_KPMINUS,
|
KEY_KPMINUS,
|
||||||
KEY_KPPLUS,
|
KEY_KPPLUS,
|
||||||
KEY_ENTER,
|
KEY_ENTER,
|
||||||
|
KEY_BACKSLASH,
|
||||||
|
|
||||||
// Misc tokens
|
// Misc tokens
|
||||||
TOKEN_NEW_SEQUENCE,
|
TOKEN_NEW_SEQUENCE,
|
||||||
|
|||||||
@@ -18,29 +18,26 @@ inline void sendTokensAsInput( const std::vector<Token> tokens )
|
|||||||
initOsSystems();
|
initOsSystems();
|
||||||
|
|
||||||
std::vector<Token> heldInputs = {};
|
std::vector<Token> heldInputs = {};
|
||||||
bool noKeyUp = false;
|
|
||||||
for ( const auto& token : tokens )
|
for ( const auto& token : tokens )
|
||||||
{
|
{
|
||||||
|
// maintained for support w/o altering other binds/parsers
|
||||||
if ( token == Token::TOKEN_NO_KEYUP_NEXT )
|
if ( token == Token::TOKEN_NO_KEYUP_NEXT )
|
||||||
{
|
{
|
||||||
noKeyUp = true;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
// Modifiers always push to held
|
||||||
if ( isModifier( token ) )
|
if ( isModifier( token ) )
|
||||||
{
|
{
|
||||||
sendKeyPress( token, KeyStatus::Down );
|
sendKeyPress( token, KeyStatus::Down );
|
||||||
if ( noKeyUp )
|
heldInputs.push_back( token );
|
||||||
{
|
continue;
|
||||||
heldInputs.push_back( token );
|
}
|
||||||
}
|
if ( isLiteral( token ) )
|
||||||
else
|
{
|
||||||
{
|
sendKeyPress( token, KeyStatus::Down );
|
||||||
sendKeyPress( token, KeyStatus::Up );
|
sendKeyPress( token, KeyStatus::Up );
|
||||||
}
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( token == Token::TOKEN_NEW_SEQUENCE )
|
if ( token == Token::TOKEN_NEW_SEQUENCE )
|
||||||
{
|
{
|
||||||
for ( const auto& h : heldInputs )
|
for ( const auto& h : heldInputs )
|
||||||
@@ -50,26 +47,6 @@ inline void sendTokensAsInput( const std::vector<Token> tokens )
|
|||||||
heldInputs.clear();
|
heldInputs.clear();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( isLiteral( token ) )
|
|
||||||
{
|
|
||||||
sendKeyPress( token, KeyStatus::Down );
|
|
||||||
if ( noKeyUp )
|
|
||||||
{
|
|
||||||
heldInputs.push_back( token );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
sendKeyPress( token, KeyStatus::Up );
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( token != Token::TOKEN_NO_KEYUP_NEXT )
|
|
||||||
{
|
|
||||||
noKeyUp = false;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !heldInputs.empty() )
|
if ( !heldInputs.empty() )
|
||||||
|
|||||||
@@ -150,6 +150,8 @@ unsigned int tokenToKeySym( const Token token )
|
|||||||
return XK_KP_Add;
|
return XK_KP_Add;
|
||||||
case Token::KEY_ENTER:
|
case Token::KEY_ENTER:
|
||||||
return XK_Return;
|
return XK_Return;
|
||||||
|
case Token::KEY_BACKSLASH:
|
||||||
|
return XK_backslash;
|
||||||
|
|
||||||
case Token::MODIFIER_CTRL:
|
case Token::MODIFIER_CTRL:
|
||||||
return XK_Control_L;
|
return XK_Control_L;
|
||||||
|
|||||||
@@ -94,6 +94,8 @@ WORD convertToVirtualKeycode( const Token token )
|
|||||||
return VK_LWIN;
|
return VK_LWIN;
|
||||||
case Token::MODIFIER_TILDE:
|
case Token::MODIFIER_TILDE:
|
||||||
return VK_OEM_3;
|
return VK_OEM_3;
|
||||||
|
case Token::KEY_BACKSLASH:
|
||||||
|
return VK_OEM_5;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user