1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

Windows: Allow IME input in plugins

This commit is contained in:
reuk 2023-05-25 13:31:00 +01:00
parent dae9567dca
commit c13276a4d6
No known key found for this signature in database
GPG key ID: FCB43929F012EE5C

View file

@ -2336,18 +2336,43 @@ public:
static bool offerKeyMessageToJUCEWindow (MSG& m) static bool offerKeyMessageToJUCEWindow (MSG& m)
{ {
if (m.message == WM_KEYDOWN || m.message == WM_KEYUP) auto* peer = getOwnerOfWindow (m.hwnd);
{
if (Component::getCurrentlyFocusedComponent() != nullptr)
{
if (auto* peer = getOwnerOfWindow (m.hwnd))
{
ScopedThreadDPIAwarenessSetter threadDpiAwarenessSetter { m.hwnd };
return m.message == WM_KEYDOWN ? peer->doKeyDown (m.wParam) if (peer == nullptr)
: peer->doKeyUp (m.wParam); return false;
}
} auto* focused = Component::getCurrentlyFocusedComponent();
if (focused == nullptr || focused->getPeer() != peer)
return false;
constexpr UINT keyMessages[] { WM_KEYDOWN,
WM_KEYUP,
WM_SYSKEYDOWN,
WM_SYSKEYUP,
WM_CHAR };
const auto messageTypeMatches = [&] (UINT msg) { return m.message == msg; };
if (std::none_of (std::begin (keyMessages), std::end (keyMessages), messageTypeMatches))
return false;
ScopedThreadDPIAwarenessSetter threadDpiAwarenessSetter { m.hwnd };
if (m.message == WM_CHAR)
return peer->doKeyChar ((int) m.wParam, m.lParam);
TranslateMessage (&m);
switch (m.message)
{
case WM_KEYDOWN:
case WM_SYSKEYDOWN:
return peer->doKeyDown (m.wParam);
case WM_KEYUP:
case WM_SYSKEYUP:
return peer->doKeyUp (m.wParam);
} }
return false; return false;