void EditorClientQt::setInputMethodState(bool active) { QWebPageClient* webPageClient = m_page->d->client; if (webPageClient) { #if QT_VERSION >= 0x040600 // Make sure to reset input method hint webPageClient->setInputMethodHint(Qt::ImhDialableCharactersOnly, false); webPageClient->setInputMethodHint(Qt::ImhDigitsOnly, false); webPageClient->setInputMethodHint(Qt::ImhEmailCharactersOnly, false); webPageClient->setInputMethodHint(Qt::ImhUrlCharactersOnly, false); webPageClient->setInputMethodHint(Qt::ImhHiddenText, false); HTMLInputElement* inputElement = 0; Frame* frame = m_page->d->page->focusController()->focusedOrMainFrame(); if (frame && frame->document() && frame->document()->focusedNode()) if (frame->document()->focusedNode()->hasTagName(HTMLNames::inputTag)) inputElement = static_cast<HTMLInputElement*>(frame->document()->focusedNode()); if (inputElement) { // Set input method hints for "number", "tel", "email", "url" and "password" input elements. webPageClient->setInputMethodHint(Qt::ImhDialableCharactersOnly, inputElement->isTelephoneField()); webPageClient->setInputMethodHint(Qt::ImhDigitsOnly, inputElement->isNumberField()); webPageClient->setInputMethodHint(Qt::ImhEmailCharactersOnly, inputElement->isEmailField()); webPageClient->setInputMethodHint(Qt::ImhUrlCharactersOnly, inputElement->isUrlField()); // Setting the Qt::WA_InputMethodEnabled attribute true and Qt::ImhHiddenText flag // for password fields. The Qt platform is responsible for determining which widget // will receive input method events for password fields. bool isPasswordField = inputElement->isPasswordField(); webPageClient->setInputMethodHint(Qt::ImhHiddenText, isPasswordField); if (isPasswordField) active = true; } #if defined(Q_WS_MAEMO_5) || defined(Q_OS_SYMBIAN) // disables auto-uppercase and predictive text for mobile devices webPageClient->setInputMethodHint(Qt::ImhNoAutoUppercase, true); webPageClient->setInputMethodHint(Qt::ImhNoPredictiveText, true); #endif // Q_WS_MAEMO_5 || Q_OS_SYMBIAN #endif // QT_VERSION check webPageClient->setInputMethodEnabled(active); } emit m_page->microFocusChanged(); }
void EditorClientQt::setInputMethodState(bool active) { QWebPageClient* webPageClient = m_page->client.data(); if (webPageClient) { Qt::InputMethodHints hints; HTMLInputElement* inputElement = 0; Frame* frame = m_page->page->focusController()->focusedOrMainFrame(); if (frame && frame->document() && frame->document()->focusedNode()) if (frame->document()->focusedNode()->hasTagName(HTMLNames::inputTag)) inputElement = static_cast<HTMLInputElement*>(frame->document()->focusedNode()); if (inputElement) { // Set input method hints for "number", "tel", "email", "url" and "password" input elements. if (inputElement->isTelephoneField()) hints |= Qt::ImhDialableCharactersOnly; if (inputElement->isNumberField()) hints |= Qt::ImhDigitsOnly; if (inputElement->isEmailField()) hints |= Qt::ImhEmailCharactersOnly; if (inputElement->isURLField()) hints |= Qt::ImhUrlCharactersOnly; // Setting the Qt::WA_InputMethodEnabled attribute true and Qt::ImhHiddenText flag // for password fields. The Qt platform is responsible for determining which widget // will receive input method events for password fields. if (inputElement->isPasswordField()) { active = true; hints |= Qt::ImhHiddenText; } } webPageClient->setInputMethodHints(hints); webPageClient->setInputMethodEnabled(active); } emit m_page->microFocusChanged(); }