From d162f276714f04b07827dfd525deea45dc55a5f1 Mon Sep 17 00:00:00 2001 From: Thomas McGuire Date: Thu, 27 Sep 2012 15:30:06 +0200 Subject: Blackberry: Support input method hints Change-Id: I2d30d6079d3982e5ca2b8d9346d0d511279792ad Reviewed-by: Nicolas Arnaud-Cormos Reviewed-by: Giuseppe D'Angelo Reviewed-by: Sean Harmer --- .../platforms/qnx/qqnxabstractvirtualkeyboard.cpp | 22 ++++++++++++++++++++++ .../platforms/qnx/qqnxabstractvirtualkeyboard.h | 1 + src/plugins/platforms/qnx/qqnxinputcontext_imf.cpp | 5 +---- .../platforms/qnx/qqnxinputcontext_noimf.cpp | 5 +---- 4 files changed, 25 insertions(+), 8 deletions(-) (limited to 'src/plugins') 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( + 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(); -- cgit v1.2.3