Browse Source

Windows: Allow IME input in plugins

v7.0.9
reuk 2 years ago
parent
commit
c13276a4d6
No known key found for this signature in database GPG Key ID: FCB43929F012EE5C
1 changed files with 35 additions and 10 deletions
  1. +35
    -10
      modules/juce_gui_basics/native/juce_Windowing_windows.cpp

+ 35
- 10
modules/juce_gui_basics/native/juce_Windowing_windows.cpp View File

@@ -2336,18 +2336,43 @@ public:
static bool offerKeyMessageToJUCEWindow (MSG& m)
{
if (m.message == WM_KEYDOWN || m.message == WM_KEYUP)
auto* peer = getOwnerOfWindow (m.hwnd);
if (peer == nullptr)
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)
{
if (Component::getCurrentlyFocusedComponent() != nullptr)
{
if (auto* peer = getOwnerOfWindow (m.hwnd))
{
ScopedThreadDPIAwarenessSetter threadDpiAwarenessSetter { m.hwnd };
case WM_KEYDOWN:
case WM_SYSKEYDOWN:
return peer->doKeyDown (m.wParam);
return m.message == WM_KEYDOWN ? peer->doKeyDown (m.wParam)
: peer->doKeyUp (m.wParam);
}
}
case WM_KEYUP:
case WM_SYSKEYUP:
return peer->doKeyUp (m.wParam);
}
return false;


Loading…
Cancel
Save