Fix keyboard input implementation error and replace old system

This commit is contained in:
Vasily
2019-05-25 18:49:42 +02:00
committed by username223
parent d48f74b314
commit 55a3830787
9 changed files with 164 additions and 528 deletions
+63 -2
View File
@@ -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:
+1
View File
@@ -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;
+9 -1
View File
@@ -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 );
}
+10 -1
View File
@@ -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
}