I originally posted this to the Windows part of the forum, but just recognized that this function is used on OS X and iOS as well.
-------
When using Microsoft IME to enter e.g. japanese text, JUCE uses the function ComponentPeer::findCurrentTextInputTarget() to find out where to write that text.
That function checks if the ComponentPeer is a parent of the currently focused component. Otherwise it returns a nullptr.
When putting a TextEditor to the desktop, it has no parent, so that check will always fail. I am often putting a TextEditor to the desktop to make sure that all keyboard input is passed to the TextEditor and not processed by the DAW.
I would like to propose the following modification in juce_ComponentPeer.cpp:
Instead of
TextInputTarget* ComponentPeer::findCurrentTextInputTarget()
{
Component* const c = Component::getCurrentlyFocusedComponent();
if (component.isParentOf (c))
if (TextInputTarget* const ti = dynamic_cast<TextInputTarget*> (c))
if (ti->isTextInputActive())
return ti;
return nullptr;
}
it should be
TextInputTarget* ComponentPeer::findCurrentTextInputTarget()
{
Component* const c = Component::getCurrentlyFocusedComponent();
if (component.isParentOf (c) || (&component == c))
if (TextInputTarget* const ti = dynamic_cast <TextInputTarget*> (c))
if (ti->isTextInputActive())
return ti;
return nullptr;
}
Then the TextEditor will also accept IME input when it is on the desktop.
What do you think?
Regards,
Gregor
