1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-01-10 00:43:59 +02:00

Merge pull request #5055 from Laserlicht/shortcut_modifier

fix shortcut modifier
This commit is contained in:
Ivan Savenko 2024-12-10 13:10:34 +02:00 committed by GitHub
commit 24669afee3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 18 additions and 7 deletions

View File

@ -32,15 +32,22 @@ InputSourceKeyboard::InputSourceKeyboard()
#endif
}
std::string InputSourceKeyboard::getKeyNameWithModifiers(const std::string & keyName) const
std::string InputSourceKeyboard::getKeyNameWithModifiers(const std::string & keyName, bool keyUp)
{
std::string result;
if (isKeyboardCtrlDown())
if(!keyUp)
{
wasKeyboardCtrlDown = isKeyboardCtrlDown();
wasKeyboardAltDown = isKeyboardAltDown();
wasKeyboardShiftDown = isKeyboardShiftDown();
}
if (wasKeyboardCtrlDown)
result += "Ctrl+";
if (isKeyboardAltDown())
if (wasKeyboardAltDown)
result += "Alt+";
if (isKeyboardShiftDown())
if (wasKeyboardShiftDown)
result += "Shift+";
result += keyName;
@ -49,7 +56,7 @@ std::string InputSourceKeyboard::getKeyNameWithModifiers(const std::string & key
void InputSourceKeyboard::handleEventKeyDown(const SDL_KeyboardEvent & key)
{
std::string keyName = getKeyNameWithModifiers(SDL_GetKeyName(key.keysym.sym));
std::string keyName = getKeyNameWithModifiers(SDL_GetKeyName(key.keysym.sym), false);
logGlobal->trace("keyboard: key '%s' pressed", keyName);
assert(key.state == SDL_PRESSED);
@ -111,7 +118,7 @@ void InputSourceKeyboard::handleEventKeyUp(const SDL_KeyboardEvent & key)
if(key.repeat != 0)
return; // ignore periodic event resends
std::string keyName = getKeyNameWithModifiers(SDL_GetKeyName(key.keysym.sym));
std::string keyName = getKeyNameWithModifiers(SDL_GetKeyName(key.keysym.sym), true);
logGlobal->trace("keyboard: key '%s' released", keyName);
if (SDL_IsTextInputActive() == SDL_TRUE)

View File

@ -15,7 +15,11 @@ struct SDL_KeyboardEvent;
/// Class that handles keyboard input from SDL events
class InputSourceKeyboard
{
std::string getKeyNameWithModifiers(const std::string & keyName) const;
bool wasKeyboardCtrlDown;
bool wasKeyboardAltDown;
bool wasKeyboardShiftDown;
std::string getKeyNameWithModifiers(const std::string & keyName, bool keyUp);
public:
InputSourceKeyboard();