void Ut_MInputContext::testUpdatePreedit() { WidgetStub widget(0); QList<QInputMethodEvent::Attribute> attributes; QInputMethodEvent event; QString updateString("preedit string"); //test preedit with traditional style m_subject->setFocusWidget(&widget); gFocusedWidget = &widget; QList<MInputMethod::PreeditTextFormat> preeditFormats; MInputMethod::PreeditTextFormat preeditFormat(0, updateString.length(), MInputMethod::PreeditDefault); preeditFormats << preeditFormat; m_subject->updatePreedit(updateString, preeditFormats, -1); waitAndProcessEvents(0); QCOMPARE(widget.inputMethodEventCount(), 1); event = widget.lastInputMethodEvent(); QVERIFY(event.preeditString() == updateString); QVERIFY(event.commitString() == ""); attributes = event.attributes(); QVERIFY(attributes.count() > 0); //test preedit with alternate style preeditFormats.clear(); preeditFormat.start = 0; preeditFormat.length = updateString.length(); preeditFormat.preeditFace = MInputMethod::PreeditNoCandidates; preeditFormats << preeditFormat; m_subject->updatePreedit(updateString, preeditFormats, -1); waitAndProcessEvents(50); QCOMPARE(widget.inputMethodEventCount(), 2); event = widget.lastInputMethodEvent(); QVERIFY(event.preeditString() == updateString); QVERIFY(event.commitString() == ""); attributes = event.attributes(); QVERIFY(attributes.count() > 0); gFocusedWidget = 0; }
void Ut_MInputContext::testReset() { WidgetStub widget(0); QInputMethodEvent event; QString preeditString(""); QList<MInputMethod::PreeditTextFormat> preeditFormats; MInputMethod::PreeditTextFormat preeditFormat; preeditFormat.start = 0; preeditFormat.preeditFace = MInputMethod::PreeditDefault; m_subject->setFocusWidget(&widget); gFocusedWidget = &widget; // Reset with empty pre-edit preeditFormat.length = preeditString.length(); preeditFormats << preeditFormat; m_subject->updatePreedit(preeditString, preeditFormats, -1); widget.resetCounters(); m_subject->reset(); waitAndProcessEvents(500); QCOMPARE(m_stub->resetCount(), 1); QCOMPARE(widget.inputMethodEventCount(), 0); m_stub->resetCallCounts(); widget.resetCounters(); preeditFormats.clear(); // Reset with non-empty pre-edit preeditString = "some string"; preeditFormat.length = preeditString.length(); preeditFormats << preeditFormat; m_subject->updatePreedit(preeditString, preeditFormats, -1); widget.resetCounters(); m_subject->reset(); waitAndProcessEvents(500); QCOMPARE(m_stub->resetCount(), 1); QCOMPARE(widget.inputMethodEventCount(), 1); event = widget.lastInputMethodEvent(); QCOMPARE(event.preeditString(), QString("")); QCOMPARE(event.commitString(), preeditString); }
void Ut_MInputContext::testCommitString() { WidgetStub widget(0); QString commitString("committed string"); m_subject->setFocusWidget(&widget); gFocusedWidget = &widget; m_subject->commitString(commitString); waitAndProcessEvents(0); QCOMPARE(widget.inputMethodEventCount(), 1); QInputMethodEvent event = widget.lastInputMethodEvent(); QVERIFY(event.preeditString() == ""); // check that event doesn't contain wrong information QCOMPARE(event.commitString(), commitString); gFocusedWidget = 0; }
bool MDeclarativeIMObserver::sceneEventFilter(QGraphicsItem * watched, QEvent * event) { if (event->type()==QEvent::InputMethod) { if (m_omitInputMethodEvents) { return true; } QInputMethodEvent *ime = static_cast<QInputMethodEvent*>(event); QString newPreedit = ime->preeditString(); QGraphicsObject *g = parentObject(); if (g != 0 && g->property("maximumLength").isValid()) { int maximumTextLength = g->property("maximumLength").toInt(); int textLength = g->property("text").toString().length(); int selectedTextLength = g->property("selectedText").toString().length(); if (textLength == maximumTextLength && newPreedit.length() - ime->replacementLength() > 0 && selectedTextLength == 0) { m_omitInputMethodEvents = true; QInputContext *ic = qApp->inputContext(); ic->reset(); m_omitInputMethodEvents = false; return true; } } if (newPreedit!=m_preedit) { m_preedit = newPreedit; emit preeditChanged(); } QList<QInputMethodEvent::Attribute> attributes = ime->attributes(); QList<QInputMethodEvent::Attribute>::iterator i; for (i = attributes.begin(); i != attributes.end(); ++i) { QInputMethodEvent::Attribute attribute = *i; if (attribute.type == QInputMethodEvent::Cursor) { m_preeditCursorPosition = attribute.start; emit preeditCursorPositionChanged(); } } } return QDeclarativeItem::sceneEventFilter(watched,event); }