diff --git a/rpcs3/Emu/Cell/Modules/cellKb.cpp b/rpcs3/Emu/Cell/Modules/cellKb.cpp index 0568bcd2d1..badf493509 100644 --- a/rpcs3/Emu/Cell/Modules/cellKb.cpp +++ b/rpcs3/Emu/Cell/Modules/cellKb.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx.h" #include "Emu/System.h" #include "Emu/IdManager.h" #include "Emu/Cell/PPUModule.h" diff --git a/rpcs3/basic_keyboard_handler.cpp b/rpcs3/basic_keyboard_handler.cpp index 6b5e46ab18..539b96b85d 100644 --- a/rpcs3/basic_keyboard_handler.cpp +++ b/rpcs3/basic_keyboard_handler.cpp @@ -1,4 +1,4 @@ -#include "basic_keyboard_handler.h" +#include "basic_keyboard_handler.h" #include #include @@ -116,29 +116,39 @@ void basic_keyboard_handler::keyReleaseEvent(QKeyEvent* keyEvent) // This should get the actual unmodified key without getting too crazy. // key() only shows the modifiers and the modified key (e.g. no easy way of knowing that - was pressed in 'SHIFT+-' in order to get _) -int basic_keyboard_handler::getUnmodifiedKey(QKeyEvent* keyEvent) +s32 basic_keyboard_handler::getUnmodifiedKey(QKeyEvent* keyEvent) { if (!keyEvent) { return -1; } - int key = keyEvent->key(); + const int key = keyEvent->key(); + + if (key < 0) + { + return key; + } + + UINT raw_key = static_cast(key); #ifdef _WIN32 if (keyEvent->modifiers() != Qt::NoModifier && !keyEvent->text().isEmpty()) { - const auto virtual_key = keyEvent->nativeVirtualKey(); - const auto mapped_key = (int)MapVirtualKeyA((UINT)virtual_key, MAPVK_VK_TO_CHAR); - if (key != mapped_key) + UINT mapped_key = MapVirtualKeyA((UINT)keyEvent->nativeVirtualKey(), MAPVK_VK_TO_CHAR); + + if (raw_key != mapped_key) { - LOG_NOTICE(HLE, "basic_keyboard_handler: converted key %s (%d) to (%d)", keyEvent->text().toStdString(), key, mapped_key); - key = mapped_key; + if (mapped_key > 0x80000000) // diacritics + { + mapped_key -= 0x80000000; + } + raw_key = mapped_key; } } #endif - return key; + return static_cast(raw_key); } void basic_keyboard_handler::LoadSettings() diff --git a/rpcs3/basic_keyboard_handler.h b/rpcs3/basic_keyboard_handler.h index ddde7fca75..1ea909ff7b 100644 --- a/rpcs3/basic_keyboard_handler.h +++ b/rpcs3/basic_keyboard_handler.h @@ -18,7 +18,7 @@ public: bool eventFilter(QObject* obj, QEvent* ev) override; void keyPressEvent(QKeyEvent* event); void keyReleaseEvent(QKeyEvent* event); - int getUnmodifiedKey(QKeyEvent* event); + s32 getUnmodifiedKey(QKeyEvent* event); void LoadSettings(); private: QWindow* m_target = nullptr;