QWidget editors to return correct value for Qt::ImEnabled

Qt::ImEnabled input method query was added for Qt5.
Enhancing source compatibility with Qt4 by setting query value
in QWidget if widget does not return any valid value.

Change-Id: I274c1f6c47a5cb08ecf550b25e5b358622e21d90
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
Reviewed-by: Joona Petrell <joona.t.petrell@nokia.com>
This commit is contained in:
Pekka Vuorela 2012-01-17 16:19:34 +02:00 committed by Qt by Nokia
parent 8ecc2da31d
commit a3a0b03735
3 changed files with 21 additions and 1 deletions

View File

@ -7929,6 +7929,8 @@ bool QWidget::event(QEvent *event)
Qt::InputMethodQuery q = (Qt::InputMethodQuery)(int)(queries & (1<<i));
if (q) {
QVariant v = inputMethodQuery(q);
if (q == Qt::ImEnabled && !v.isValid() && isEnabled())
v = QVariant(true); // special case for Qt4 compatibility
query->setValue(q, v);
}
}

View File

@ -273,6 +273,7 @@ private slots:
void bidiLogicalMovement();
void selectAndCursorPosition();
void inputMethod();
void inputMethodSelection();
void inputMethodTentativeCommit();
@ -3805,6 +3806,18 @@ void tst_QLineEdit::selectAndCursorPosition()
QCOMPARE(testWidget->cursorPosition(), 0);
}
void tst_QLineEdit::inputMethod()
{
// widget accepts input
QInputMethodQueryEvent queryEvent(Qt::ImEnabled);
QApplication::sendEvent(testWidget, &queryEvent);
QCOMPARE(queryEvent.value(Qt::ImEnabled).toBool(), true);
testWidget->setEnabled(false);
QApplication::sendEvent(testWidget, &queryEvent);
QCOMPARE(queryEvent.value(Qt::ImEnabled).toBool(), false);
}
void tst_QLineEdit::inputMethodSelection()
{
testWidget->setText("Lorem ipsum dolor sit amet, consectetur adipiscing elit.");

View File

@ -2407,11 +2407,16 @@ void tst_QTextEdit::inputMethodQuery()
ed->setText(text);
ed->selectAll();
QInputMethodQueryEvent event(Qt::ImQueryInput);
QInputMethodQueryEvent event(Qt::ImQueryInput | Qt::ImEnabled);
QGuiApplication::sendEvent(ed, &event);
int anchor = event.value(Qt::ImAnchorPosition).toInt();
int position = event.value(Qt::ImCursorPosition).toInt();
QCOMPARE(qAbs(position - anchor), text.length());
QCOMPARE(event.value(Qt::ImEnabled).toBool(), true);
ed->setEnabled(false);
QGuiApplication::sendEvent(ed, &event);
QCOMPARE(event.value(Qt::ImEnabled).toBool(), false);
}
QTEST_MAIN(tst_QTextEdit)