diff --git a/modules/juce_gui_basics/keyboard/juce_TextInputTarget.h b/modules/juce_gui_basics/keyboard/juce_TextInputTarget.h index b255a2a0f0..63cb25ee60 100644 --- a/modules/juce_gui_basics/keyboard/juce_TextInputTarget.h +++ b/modules/juce_gui_basics/keyboard/juce_TextInputTarget.h @@ -108,7 +108,8 @@ public: decimalKeyboard, urlKeyboard, emailAddressKeyboard, - phoneNumberKeyboard + phoneNumberKeyboard, + passwordKeyboard }; /** Returns the target's preference for the type of keyboard that would be most appropriate. diff --git a/modules/juce_gui_basics/native/juce_ios_UIViewComponentPeer.mm b/modules/juce_gui_basics/native/juce_ios_UIViewComponentPeer.mm index 95ecb9fda4..0b6d0532bc 100644 --- a/modules/juce_gui_basics/native/juce_ios_UIViewComponentPeer.mm +++ b/modules/juce_gui_basics/native/juce_ios_UIViewComponentPeer.mm @@ -456,9 +456,10 @@ public: case TextInputTarget::urlKeyboard: return UIKeyboardTypeURL; case TextInputTarget::emailAddressKeyboard: return UIKeyboardTypeEmailAddress; case TextInputTarget::phoneNumberKeyboard: return UIKeyboardTypePhonePad; - default: jassertfalse; break; + case TextInputTarget::passwordKeyboard: return UIKeyboardTypeASCIICapable; } + jassertfalse; return UIKeyboardTypeDefault; } @@ -1816,6 +1817,10 @@ void UIViewComponentPeer::grabFocus() void UIViewComponentPeer::textInputRequired (Point, TextInputTarget&) { + // We need to restart the text input session so that the keyboard can change types if necessary. + if ([hiddenTextInput.get() isFirstResponder]) + [hiddenTextInput.get() resignFirstResponder]; + [hiddenTextInput.get() becomeFirstResponder]; } diff --git a/modules/juce_gui_basics/widgets/juce_TextEditor.cpp b/modules/juce_gui_basics/widgets/juce_TextEditor.cpp index 18b35fe0e4..aca419cce9 100644 --- a/modules/juce_gui_basics/widgets/juce_TextEditor.cpp +++ b/modules/juce_gui_basics/widgets/juce_TextEditor.cpp @@ -2306,6 +2306,11 @@ void TextEditor::setTemporaryUnderlining (const Array>& newUnderlined repaint(); } +TextInputTarget::VirtualKeyboardType TextEditor::getKeyboardType() +{ + return passwordCharacter != 0 ? passwordKeyboard : keyboardType; +} + //============================================================================== UndoManager* TextEditor::getUndoManager() noexcept { diff --git a/modules/juce_gui_basics/widgets/juce_TextEditor.h b/modules/juce_gui_basics/widgets/juce_TextEditor.h index c48425d48b..748bdcf926 100644 --- a/modules/juce_gui_basics/widgets/juce_TextEditor.h +++ b/modules/juce_gui_basics/widgets/juce_TextEditor.h @@ -742,7 +742,7 @@ public: /** @internal */ void setTemporaryUnderlining (const Array>&) override; /** @internal */ - VirtualKeyboardType getKeyboardType() override { return keyboardType; } + VirtualKeyboardType getKeyboardType() override; protected: //==============================================================================