From ae3ad04bfc48957193e465058d2c3bb1a01e9f7b Mon Sep 17 00:00:00 2001 From: Connor McLaughlin Date: Sat, 15 Aug 2020 20:48:47 +1000 Subject: [PATCH] Qt: Fix modifier key bindings not having any effect --- src/duckstation-qt/qtutils.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/duckstation-qt/qtutils.cpp b/src/duckstation-qt/qtutils.cpp index 47fcf4450..9df725acb 100644 --- a/src/duckstation-qt/qtutils.cpp +++ b/src/duckstation-qt/qtutils.cpp @@ -525,8 +525,6 @@ static const std::array s_qt_key_modifiers = { {Qt::AltModifier, Qt::Key_Alt, QStringLiteral("Alt")}, {Qt::MetaModifier, Qt::Key_Meta, QStringLiteral("Meta")}, {Qt::KeypadModifier, static_cast(0), QStringLiteral("Keypad")}}}; -static const Qt::KeyboardModifiers s_qt_modifier_mask = - Qt::ShiftModifier | Qt::ControlModifier | Qt::AltModifier | Qt::MetaModifier | Qt::KeypadModifier; QString GetKeyIdentifier(int key) { @@ -597,7 +595,20 @@ std::optional ParseKeyString(const QString& key_str) int KeyEventToInt(const QKeyEvent* ke) { - return static_cast(ke->modifiers() & s_qt_modifier_mask) | ke->key(); + const Qt::KeyboardModifiers mods = ke->modifiers(); + const int key = ke->key(); + + int val = key; + if (mods != 0) + { + for (const QtKeyModifierEntry& mod : s_qt_key_modifiers) + { + if (mods & mod.mod && key != mod.key) + val |= static_cast(mod.mod); + } + } + + return val; } QByteArray ReadStreamToQByteArray(ByteStream* stream, bool rewind /*= false*/)