From 4f59b5b5308011fdc4bb08bc179d5298077fd9ad Mon Sep 17 00:00:00 2001 From: Andrew den Exter Date: Mon, 25 Jul 2011 16:58:46 +1000 Subject: Emit selectionChanged signals when input method alters selection. Mark the selection as dirty if an input method event contains a selection and emit selectionChanged() if it's not emitted by finishChange(). Task-number: QTBUG-19731 Change-Id: Ief6f06f40071f64dae4db0ba365676c059a39c7e Reviewed-on: http://codereview.qt.nokia.com/2081 Reviewed-by: Qt Sanity Bot Reviewed-by: Andrew den Exter --- tests/auto/qlineedit/tst_qlineedit.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'tests/auto/qlineedit') diff --git a/tests/auto/qlineedit/tst_qlineedit.cpp b/tests/auto/qlineedit/tst_qlineedit.cpp index 72b402f69d..68e88a87ed 100644 --- a/tests/auto/qlineedit/tst_qlineedit.cpp +++ b/tests/auto/qlineedit/tst_qlineedit.cpp @@ -290,6 +290,7 @@ private slots: void bidiLogicalMovement(); void selectAndCursorPosition(); + void inputMethodSelection(); protected slots: void editingFinished(); @@ -3883,5 +3884,28 @@ void tst_QLineEdit::selectAndCursorPosition() QCOMPARE(testWidget->cursorPosition(), 0); } +void tst_QLineEdit::inputMethodSelection() +{ + testWidget->setText("Lorem ipsum dolor sit amet, consectetur adipiscing elit."); + testWidget->setSelection(0,0); + QSignalSpy selectionSpy(testWidget, SIGNAL(selectionChanged())); + + QCOMPARE(selectionSpy.count(), 0); + QCOMPARE(testWidget->selectionStart(), -1); + + testWidget->setSelection(0,5); + + QCOMPARE(selectionSpy.count(), 1); + QCOMPARE(testWidget->selectionStart(), 0); + + QList attributes; + attributes << QInputMethodEvent::Attribute(QInputMethodEvent::Selection, 12, 5, QVariant()); + QInputMethodEvent event("", attributes); + QApplication::sendEvent(testWidget, &event); + + QCOMPARE(selectionSpy.count(), 2); + QCOMPARE(testWidget->selectionStart(), 12); +} + QTEST_MAIN(tst_QLineEdit) #include "tst_qlineedit.moc" -- cgit v1.2.3