From 2e6bd23f22908f462906258587e37b05d21acd07 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Sat, 12 Aug 2023 15:20:10 +1000 Subject: [PATCH] Qt: Fix arrow key handling on macOS --- pcsx2-qt/QtKeyCodes.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/pcsx2-qt/QtKeyCodes.cpp b/pcsx2-qt/QtKeyCodes.cpp index 384a560c99..324a026d0c 100644 --- a/pcsx2-qt/QtKeyCodes.cpp +++ b/pcsx2-qt/QtKeyCodes.cpp @@ -513,5 +513,22 @@ std::optional InputManager::ConvertHostKeyboardCodeToString(u32 cod u32 QtUtils::KeyEventToCode(const QKeyEvent* ev) { - return static_cast(ev->key()) | (static_cast(ev->modifiers()) & static_cast(Qt::KeypadModifier)); + int key = ev->key(); + Qt::KeyboardModifiers modifiers = ev->modifiers(); + +#ifdef __APPLE__ + // On macOS, Qt applies the Keypad modifier regardless of whether the arrow keys, or numpad was pressed. + // The only way to differentiate between the keypad and the arrow keys is by the text. + // Hopefully some keyboard layouts don't change the numpad positioning... + if (modifiers & Qt::KeypadModifier && key >= Qt::Key_Insert && key <= Qt::Key_PageDown) + { + if (ev->text().isEmpty()) + { + // Drop the modifier, because it's probably not actually a numpad push. + modifiers &= ~Qt::KeypadModifier; + } + } +#endif + + return static_cast(key) | (static_cast(modifiers) & static_cast(Qt::KeypadModifier)); }