diff options
author | Pekka Vuorela <pekka.ta.vuorela@nokia.com> | 2012-01-20 14:07:20 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-01-27 15:38:09 +0100 |
commit | ed576da6712d881b87a3fffcbddbae925157d265 (patch) | |
tree | 57fc5d5e2fd8ef7fd27fa45e18d5b94771effa4c /tests | |
parent | 8aa187fec80810d37107341ca6dc53264187ae9d (diff) |
Enhance editors notifying input panel for input method changes
Introduced protected QQuickItem::updateInputMethod() and removed
similar, but badly named updateMicroFocus(). Added some missing
notifications from the editors and avoided unnecessary updates when not
having focus.
Change-Id: Id5c00e87dc26fd35c3f919006817511d4ed6418d
Reviewed-by: Andrew den Exter <andrew.den-exter@nokia.com>
Reviewed-by: Joona Petrell <joona.t.petrell@nokia.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/qtquick2/qquicktextedit/tst_qquicktextedit.cpp | 99 | ||||
-rw-r--r-- | tests/auto/qtquick2/qquicktextinput/tst_qquicktextinput.cpp | 30 |
2 files changed, 125 insertions, 4 deletions
diff --git a/tests/auto/qtquick2/qquicktextedit/tst_qquicktextedit.cpp b/tests/auto/qtquick2/qquicktextedit/tst_qquicktextedit.cpp index 1d63145b2f..861f7a9efc 100644 --- a/tests/auto/qtquick2/qquicktextedit/tst_qquicktextedit.cpp +++ b/tests/auto/qtquick2/qquicktextedit/tst_qquicktextedit.cpp @@ -144,6 +144,7 @@ private slots: void canPaste(); void canPasteEmpty(); void textInput(); + void inputPanelUpdate(); void openInputPanel(); void geometrySignals(); void pastingRichText_QTBUG_14003(); @@ -226,7 +227,7 @@ void tst_qquicktextedit::simulateKeys(QWindow *window, const QList<Key> &keys) void tst_qquicktextedit::simulateKeys(QWindow *window, const QKeySequence &sequence) { - for (uint i = 0; i < sequence.count(); ++i) { + for (int i = 0; i < sequence.count(); ++i) { const int key = sequence[i]; const int modifiers = key & Qt::KeyboardModifierMask; @@ -236,7 +237,7 @@ void tst_qquicktextedit::simulateKeys(QWindow *window, const QKeySequence &seque QList<Key> &operator <<(QList<Key> &keys, const QKeySequence &sequence) { - for (uint i = 0; i < sequence.count(); ++i) + for (int i = 0; i < sequence.count(); ++i) keys << Key(sequence[i], QChar()); return keys; } @@ -2131,6 +2132,100 @@ void tst_qquicktextedit::textInput() QGuiApplication::sendEvent(qGuiApp->inputPanel()->inputItem(), &event2); QCOMPARE(spy.count(), 1); QCOMPARE(edit->text(), QString("string")); + + QInputMethodQueryEvent queryEvent(Qt::ImEnabled); + QGuiApplication::sendEvent(qGuiApp->inputPanel()->inputItem(), &queryEvent); + QCOMPARE(queryEvent.value(Qt::ImEnabled).toBool(), true); + + edit->setReadOnly(true); + QGuiApplication::sendEvent(edit, &queryEvent); + QCOMPARE(queryEvent.value(Qt::ImEnabled).toBool(), false); +} + +void tst_qquicktextedit::inputPanelUpdate() +{ + PlatformInputContext platformInputContext; + QInputPanelPrivate *inputPanelPrivate = QInputPanelPrivate::get(qApp->inputPanel()); + inputPanelPrivate->testContext = &platformInputContext; + + QQuickView view(testFileUrl("inputMethodEvent.qml")); + view.show(); + view.requestActivateWindow(); + QTest::qWaitForWindowShown(&view); + QTRY_COMPARE(&view, qGuiApp->focusWindow()); + QQuickTextEdit *edit = qobject_cast<QQuickTextEdit *>(view.rootObject()); + QVERIFY(edit); + QVERIFY(edit->hasActiveFocus() == true); + + // text change even without cursor position change needs to trigger update + edit->setText("test"); + platformInputContext.clear(); + edit->setText("xxxx"); + QVERIFY(platformInputContext.m_updateCallCount > 0); + + // input method event replacing text + platformInputContext.clear(); + { + QInputMethodEvent inputMethodEvent; + inputMethodEvent.setCommitString("y", -1, 1); + QGuiApplication::sendEvent(edit, &inputMethodEvent); + } + QVERIFY(platformInputContext.m_updateCallCount > 0); + + // input method changing selection + platformInputContext.clear(); + { + QList<QInputMethodEvent::Attribute> attributes; + attributes << QInputMethodEvent::Attribute(QInputMethodEvent::Selection, 0, 2, QVariant()); + QInputMethodEvent inputMethodEvent("", attributes); + QGuiApplication::sendEvent(edit, &inputMethodEvent); + } + QVERIFY(edit->selectionStart() != edit->selectionEnd()); + QVERIFY(platformInputContext.m_updateCallCount > 0); + + // font changes + platformInputContext.clear(); + QFont font = edit->font(); + font.setBold(!font.bold()); + edit->setFont(font); + QVERIFY(platformInputContext.m_updateCallCount > 0); + + // normal input + platformInputContext.clear(); + { + QInputMethodEvent inputMethodEvent; + inputMethodEvent.setCommitString("y"); + QGuiApplication::sendEvent(edit, &inputMethodEvent); + } + QVERIFY(platformInputContext.m_updateCallCount > 0); + + // changing cursor position + platformInputContext.clear(); + edit->setCursorPosition(0); + QVERIFY(platformInputContext.m_updateCallCount > 0); + + // continuing with selection + platformInputContext.clear(); + edit->moveCursorSelection(1); + QVERIFY(platformInputContext.m_updateCallCount > 0); + + // read only disabled input method + platformInputContext.clear(); + edit->setReadOnly(true); + QVERIFY(platformInputContext.m_updateCallCount > 0); + edit->setReadOnly(false); + + // no updates while no focus + edit->setFocus(false); + platformInputContext.clear(); + edit->setText("Foo"); + QCOMPARE(platformInputContext.m_updateCallCount, 0); + edit->setCursorPosition(1); + QCOMPARE(platformInputContext.m_updateCallCount, 0); + edit->selectAll(); + QCOMPARE(platformInputContext.m_updateCallCount, 0); + edit->setReadOnly(true); + QCOMPARE(platformInputContext.m_updateCallCount, 0); } void tst_qquicktextedit::openInputPanel() diff --git a/tests/auto/qtquick2/qquicktextinput/tst_qquicktextinput.cpp b/tests/auto/qtquick2/qquicktextinput/tst_qquicktextinput.cpp index cae38bcd73..8fc768f2ab 100644 --- a/tests/auto/qtquick2/qquicktextinput/tst_qquicktextinput.cpp +++ b/tests/auto/qtquick2/qquicktextinput/tst_qquicktextinput.cpp @@ -222,7 +222,7 @@ void tst_qquicktextinput::simulateKeys(QWindow *window, const QList<Key> &keys) void tst_qquicktextinput::simulateKeys(QWindow *window, const QKeySequence &sequence) { - for (uint i = 0; i < sequence.count(); ++i) { + for (int i = 0; i < sequence.count(); ++i) { const int key = sequence[i]; const int modifiers = key & Qt::KeyboardModifierMask; @@ -232,7 +232,7 @@ void tst_qquicktextinput::simulateKeys(QWindow *window, const QKeySequence &sequ QList<Key> &operator <<(QList<Key> &keys, const QKeySequence &sequence) { - for (uint i = 0; i < sequence.count(); ++i) + for (int i = 0; i < sequence.count(); ++i) keys << Key(sequence[i], QChar()); return keys; } @@ -1951,6 +1951,14 @@ void tst_qquicktextinput::inputMethods() event.setCommitString("replacement", -input->text().length(), input->text().length()); QGuiApplication::sendEvent(qGuiApp->inputPanel()->inputItem(), &event); QCOMPARE(input->selectionStart(), input->selectionEnd()); + + QInputMethodQueryEvent enabledQueryEvent(Qt::ImEnabled); + QGuiApplication::sendEvent(input, &enabledQueryEvent); + QCOMPARE(enabledQueryEvent.value(Qt::ImEnabled).toBool(), true); + + input->setReadOnly(true); + QGuiApplication::sendEvent(input, &enabledQueryEvent); + QCOMPARE(enabledQueryEvent.value(Qt::ImEnabled).toBool(), false); } /* @@ -3081,6 +3089,24 @@ void tst_qquicktextinput::inputPanelUpdate() platformInputContext.clear(); input->setCursorPosition(0); QVERIFY(platformInputContext.m_updateCallCount > 0); + + // read only disabled input method + platformInputContext.clear(); + input->setReadOnly(true); + QVERIFY(platformInputContext.m_updateCallCount > 0); + input->setReadOnly(false); + + // no updates while no focus + input->setFocus(false); + platformInputContext.clear(); + input->setText("Foo"); + QCOMPARE(platformInputContext.m_updateCallCount, 0); + input->setCursorPosition(1); + QCOMPARE(platformInputContext.m_updateCallCount, 0); + input->selectAll(); + QCOMPARE(platformInputContext.m_updateCallCount, 0); + input->setReadOnly(true); + QCOMPARE(platformInputContext.m_updateCallCount, 0); } void tst_qquicktextinput::cursorRectangleSize() |