diff options
Diffstat (limited to 'src')
4 files changed, 25 insertions, 8 deletions
diff --git a/src/plugins/platforms/qnx/qqnxabstractvirtualkeyboard.cpp b/src/plugins/platforms/qnx/qqnxabstractvirtualkeyboard.cpp index 43c4d9070a..99b83013fb 100644 --- a/src/plugins/platforms/qnx/qqnxabstractvirtualkeyboard.cpp +++ b/src/plugins/platforms/qnx/qqnxabstractvirtualkeyboard.cpp @@ -62,6 +62,28 @@ void QQnxAbstractVirtualKeyboard::setKeyboardMode(KeyboardMode mode) applyKeyboardMode(mode); } +void QQnxAbstractVirtualKeyboard::setInputHintsFromObject(QObject *focusObject) +{ + if (focusObject && focusObject->isWidgetType()) { + const Qt::InputMethodHints hints = static_cast<Qt::InputMethodHints>( + focusObject->property("inputMethodHints").toInt()); + if (hints & Qt::ImhEmailCharactersOnly) { + setKeyboardMode(QQnxAbstractVirtualKeyboard::Email); + } else if (hints & Qt::ImhDialableCharactersOnly) { + setKeyboardMode(QQnxAbstractVirtualKeyboard::Phone); + } else if (hints & Qt::ImhUrlCharactersOnly) { + setKeyboardMode(QQnxAbstractVirtualKeyboard::Web); + } else if (hints & Qt::ImhFormattedNumbersOnly || hints & Qt::ImhDigitsOnly || + hints & Qt::ImhDate || hints & Qt::ImhTime) { + setKeyboardMode(QQnxAbstractVirtualKeyboard::NumPunc); + } else { + setKeyboardMode(QQnxAbstractVirtualKeyboard::Default); + } + } else { + setKeyboardMode(QQnxAbstractVirtualKeyboard::Default); + } +} + void QQnxAbstractVirtualKeyboard::setHeight(int height) { if (height == m_height) diff --git a/src/plugins/platforms/qnx/qqnxabstractvirtualkeyboard.h b/src/plugins/platforms/qnx/qqnxabstractvirtualkeyboard.h index 18cf162bcf..9b911e1dec 100644 --- a/src/plugins/platforms/qnx/qqnxabstractvirtualkeyboard.h +++ b/src/plugins/platforms/qnx/qqnxabstractvirtualkeyboard.h @@ -74,6 +74,7 @@ public: QLocale locale() const { return m_locale; } void setKeyboardMode(KeyboardMode mode); + void setInputHintsFromObject(QObject *focusObject); KeyboardMode keyboardMode() const { return m_keyboardMode; } Q_SIGNALS: diff --git a/src/plugins/platforms/qnx/qqnxinputcontext_imf.cpp b/src/plugins/platforms/qnx/qqnxinputcontext_imf.cpp index d43792d6ae..72a967d5e5 100644 --- a/src/plugins/platforms/qnx/qqnxinputcontext_imf.cpp +++ b/src/plugins/platforms/qnx/qqnxinputcontext_imf.cpp @@ -1559,10 +1559,7 @@ void QQnxInputContext::setFocusObject(QObject *object) if (m_inputPanelVisible) hideInputPanel(); } else { - if (object->inherits("QAbstractSpinBox")) - m_virtualKeyboard.setKeyboardMode(QQnxAbstractVirtualKeyboard::Phone); - else - m_virtualKeyboard.setKeyboardMode(QQnxAbstractVirtualKeyboard::Default); + m_virtualKeyboard.setInputHintsFromObject(object); if (!m_inputPanelVisible) showInputPanel(); diff --git a/src/plugins/platforms/qnx/qqnxinputcontext_noimf.cpp b/src/plugins/platforms/qnx/qqnxinputcontext_noimf.cpp index c42cfadf12..23d1f75539 100644 --- a/src/plugins/platforms/qnx/qqnxinputcontext_noimf.cpp +++ b/src/plugins/platforms/qnx/qqnxinputcontext_noimf.cpp @@ -163,10 +163,7 @@ void QQnxInputContext::setFocusObject(QObject *object) if (m_inputPanelVisible) hideInputPanel(); } else { - if (object->inherits("QAbstractSpinBox")) - m_virtualKeyboard.setKeyboardMode(QQnxAbstractVirtualKeyboard::Phone); - else - m_virtualKeyboard.setKeyboardMode(QQnxAbstractVirtualKeyboard::Default); + m_virtualKeyboard.setInputHintsFromObject(object); if (!m_inputPanelVisible) showInputPanel(); |