Fix keyboard input implementation error and replace old system
This commit is contained in:
@@ -316,13 +316,74 @@ bool isModifier( const Token token ) noexcept
|
||||
}
|
||||
}
|
||||
|
||||
bool isLiteralKey( const Token token ) noexcept
|
||||
{
|
||||
switch ( token )
|
||||
{
|
||||
case Token::KEY_a:
|
||||
return true;
|
||||
case Token::KEY_b:
|
||||
return true;
|
||||
case Token::KEY_c:
|
||||
return true;
|
||||
case Token::KEY_d:
|
||||
return true;
|
||||
case Token::KEY_e:
|
||||
return true;
|
||||
case Token::KEY_f:
|
||||
return true;
|
||||
case Token::KEY_g:
|
||||
return true;
|
||||
case Token::KEY_h:
|
||||
return true;
|
||||
case Token::KEY_i:
|
||||
return true;
|
||||
case Token::KEY_j:
|
||||
return true;
|
||||
case Token::KEY_k:
|
||||
return true;
|
||||
case Token::KEY_l:
|
||||
return true;
|
||||
case Token::KEY_m:
|
||||
return true;
|
||||
case Token::KEY_n:
|
||||
return true;
|
||||
case Token::KEY_o:
|
||||
return true;
|
||||
case Token::KEY_p:
|
||||
return true;
|
||||
case Token::KEY_q:
|
||||
return true;
|
||||
case Token::KEY_r:
|
||||
return true;
|
||||
case Token::KEY_s:
|
||||
return true;
|
||||
case Token::KEY_t:
|
||||
return true;
|
||||
case Token::KEY_u:
|
||||
return true;
|
||||
case Token::KEY_v:
|
||||
return true;
|
||||
case Token::KEY_w:
|
||||
return true;
|
||||
case Token::KEY_x:
|
||||
return true;
|
||||
case Token::KEY_y:
|
||||
return true;
|
||||
case Token::KEY_z:
|
||||
return true;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool isLiteral( const Token token ) noexcept
|
||||
{
|
||||
if ( isalnum( static_cast<int>( token ) ) )
|
||||
if ( isLiteralKey( token ) )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
switch ( token )
|
||||
{
|
||||
case Token::KEY_F1:
|
||||
|
||||
@@ -95,3 +95,4 @@ std::vector<Token>
|
||||
|
||||
bool isModifier( const Token token ) noexcept;
|
||||
bool isLiteral( const Token token ) noexcept;
|
||||
bool isLiteralKey( const Token token ) noexcept;
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
unsigned int tokenToKeyCode( const Token token, Display* const display )
|
||||
{
|
||||
if ( isalnum( static_cast<int>( token ) ) )
|
||||
if ( isLiteralKey( token ) )
|
||||
{
|
||||
return XKeysymToKeycode( display, static_cast<KeySym>( token ) );
|
||||
}
|
||||
@@ -137,6 +137,14 @@ void sendTokensAsInput( const std::vector<Token> tokens )
|
||||
}
|
||||
}
|
||||
|
||||
if ( !heldInputs.empty() )
|
||||
{
|
||||
for ( const auto& h : heldInputs )
|
||||
{
|
||||
sendKeyPress( h, KeyStatus::Up, display );
|
||||
}
|
||||
}
|
||||
|
||||
XSync( display, False );
|
||||
XTestGrabControl( display, False );
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
WORD convertToVirtualKeycode( const Token token )
|
||||
{
|
||||
if ( isalnum( static_cast<int>( token ) ) )
|
||||
if ( isLiteralKey( token ) )
|
||||
{
|
||||
return static_cast<WORD>( VkKeyScan( static_cast<int>( token ) ) );
|
||||
}
|
||||
@@ -178,6 +178,15 @@ void sendTokensAsInput( const std::vector<Token> tokens )
|
||||
}
|
||||
}
|
||||
|
||||
if ( !heldInputs.empty() )
|
||||
{
|
||||
for ( const auto& h : heldInputs )
|
||||
{
|
||||
inputs.push_back( createInputStruct( convertToVirtualKeycode( h ),
|
||||
KeyStatus::Up ) );
|
||||
}
|
||||
}
|
||||
|
||||
sendKeyboardInputRaw( inputs );
|
||||
// send inputs
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user