diff --git a/modules/juce_gui_basics/native/juce_android_Windowing.cpp b/modules/juce_gui_basics/native/juce_android_Windowing.cpp index 7609d0181f..88c8064395 100644 --- a/modules/juce_gui_basics/native/juce_android_Windowing.cpp +++ b/modules/juce_gui_basics/native/juce_android_Windowing.cpp @@ -940,7 +940,7 @@ public: if (! isTimerRunning()) startTimer (500); - } + } //============================================================================== void handlePaintCallback (jobject canvas, jobject paint) diff --git a/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm b/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm index 218738992f..a1d228c641 100644 --- a/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm +++ b/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm @@ -1569,7 +1569,7 @@ public: void textInputRequired (Point, TextInputTarget&) override {} - void dismissPendingTextInput() override + void closeInputMethodContext() override { stringBeingComposed.clear(); const auto* inputContext = [NSTextInputContext currentInputContext]; diff --git a/modules/juce_gui_basics/native/juce_win32_Windowing.cpp b/modules/juce_gui_basics/native/juce_win32_Windowing.cpp index 4ffc09d9a8..14a6d9bca6 100644 --- a/modules/juce_gui_basics/native/juce_win32_Windowing.cpp +++ b/modules/juce_gui_basics/native/juce_win32_Windowing.cpp @@ -1869,9 +1869,14 @@ public: OnScreenKeyboard::getInstance()->activate(); } - void dismissPendingTextInput() override + void closeInputMethodContext() override { imeHandler.handleSetContext (hwnd, false); + } + + void dismissPendingTextInput() override + { + closeInputMethodContext(); if (uwpViewSettings.isTabletModeActivatedForWindow (hwnd)) OnScreenKeyboard::getInstance()->deactivate(); diff --git a/modules/juce_gui_basics/widgets/juce_TextEditor.cpp b/modules/juce_gui_basics/widgets/juce_TextEditor.cpp index d5f98c2f90..308ba8e687 100644 --- a/modules/juce_gui_basics/widgets/juce_TextEditor.cpp +++ b/modules/juce_gui_basics/widgets/juce_TextEditor.cpp @@ -1838,7 +1838,7 @@ void TextEditor::mouseDown (const MouseEvent& e) e.mods.isShiftDown()); if (auto* peer = getPeer()) - peer->dismissPendingTextInput(); + peer->closeInputMethodContext(); } else { @@ -1961,7 +1961,7 @@ bool TextEditor::moveCaretWithTransaction (const int newPos, const bool selectin moveCaretTo (newPos, selecting); if (auto* peer = getPeer()) - peer->dismissPendingTextInput(); + peer->closeInputMethodContext(); return true; } diff --git a/modules/juce_gui_basics/windows/juce_ComponentPeer.cpp b/modules/juce_gui_basics/windows/juce_ComponentPeer.cpp index a29c74a01b..47759c7522 100644 --- a/modules/juce_gui_basics/windows/juce_ComponentPeer.cpp +++ b/modules/juce_gui_basics/windows/juce_ComponentPeer.cpp @@ -274,7 +274,12 @@ TextInputTarget* ComponentPeer::findCurrentTextInputTarget() return nullptr; } -void ComponentPeer::dismissPendingTextInput() {} +void ComponentPeer::closeInputMethodContext() {} + +void ComponentPeer::dismissPendingTextInput() +{ + closeInputMethodContext(); +} //============================================================================== void ComponentPeer::handleBroughtToFront() diff --git a/modules/juce_gui_basics/windows/juce_ComponentPeer.h b/modules/juce_gui_basics/windows/juce_ComponentPeer.h index 15406df901..e227f42da2 100644 --- a/modules/juce_gui_basics/windows/juce_ComponentPeer.h +++ b/modules/juce_gui_basics/windows/juce_ComponentPeer.h @@ -359,7 +359,16 @@ public: */ virtual void textInputRequired (Point position, TextInputTarget&) = 0; - /** If there's some kind of OS input-method in progress, this should dismiss it. */ + /** If there's a currently active input-method context - i.e. characters are being + composed using multiple keystrokes - this should commit the current state of the + context to the text and clear the context. + */ + virtual void closeInputMethodContext(); + + /** If there's some kind of OS input-method in progress, this should dismiss it. + + Overrides of this function should call closeInputMethodContext(). + */ virtual void dismissPendingTextInput(); /** Returns the currently focused TextInputTarget, or null if none is found. */