From 197b145a23564910f6316ca0b2f9a1b39efaf9ef Mon Sep 17 00:00:00 2001 From: Tasuku Suzuki Date: Tue, 22 May 2012 08:14:34 +0900 Subject: Fixed inputMethodQuery() for Qt::ImHints to return QWidget::inputMethodHints() Change-Id: I46735c553e0cb4689cd0c53a69d07ed61ba56bf6 Reviewed-by: Joona Petrell --- src/widgets/widgets/qplaintextedit.cpp | 28 ++++++++++++++-------- src/widgets/widgets/qtextedit.cpp | 28 ++++++++++++++-------- .../widgets/qplaintextedit/tst_qplaintextedit.cpp | 20 ++++++++++++++++ .../widgets/widgets/qtextedit/tst_qtextedit.cpp | 21 ++++++++++++++++ 4 files changed, 77 insertions(+), 20 deletions(-) diff --git a/src/widgets/widgets/qplaintextedit.cpp b/src/widgets/widgets/qplaintextedit.cpp index c31ac65046..60160c91c3 100644 --- a/src/widgets/widgets/qplaintextedit.cpp +++ b/src/widgets/widgets/qplaintextedit.cpp @@ -2127,16 +2127,24 @@ void QPlainTextEdit::scrollContentsBy(int dx, int /*dy*/) QVariant QPlainTextEdit::inputMethodQuery(Qt::InputMethodQuery property) const { Q_D(const QPlainTextEdit); - QVariant v = d->control->inputMethodQuery(property); - const QPoint offset(-d->horizontalOffset(), -0); - if (v.type() == QVariant::RectF) - v = v.toRectF().toRect().translated(offset); - else if (v.type() == QVariant::PointF) - v = v.toPointF().toPoint() + offset; - else if (v.type() == QVariant::Rect) - v = v.toRect().translated(offset); - else if (v.type() == QVariant::Point) - v = v.toPoint() + offset; + QVariant v; + switch (property) { + case Qt::ImHints: + v = QWidget::inputMethodQuery(property); + break; + default: + v = d->control->inputMethodQuery(property); + const QPoint offset(-d->horizontalOffset(), -0); + if (v.type() == QVariant::RectF) + v = v.toRectF().toRect().translated(offset); + else if (v.type() == QVariant::PointF) + v = v.toPointF().toPoint() + offset; + else if (v.type() == QVariant::Rect) + v = v.toRect().translated(offset); + else if (v.type() == QVariant::Point) + v = v.toPoint() + offset; + } + return v; } diff --git a/src/widgets/widgets/qtextedit.cpp b/src/widgets/widgets/qtextedit.cpp index 3dbd24705b..c9de35a261 100644 --- a/src/widgets/widgets/qtextedit.cpp +++ b/src/widgets/widgets/qtextedit.cpp @@ -1665,16 +1665,24 @@ void QTextEdit::scrollContentsBy(int dx, int dy) QVariant QTextEdit::inputMethodQuery(Qt::InputMethodQuery property) const { Q_D(const QTextEdit); - QVariant v = d->control->inputMethodQuery(property); - const QPoint offset(-d->horizontalOffset(), -d->verticalOffset()); - if (v.type() == QVariant::RectF) - v = v.toRectF().toRect().translated(offset); - else if (v.type() == QVariant::PointF) - v = v.toPointF().toPoint() + offset; - else if (v.type() == QVariant::Rect) - v = v.toRect().translated(offset); - else if (v.type() == QVariant::Point) - v = v.toPoint() + offset; + QVariant v; + switch (property) { + case Qt::ImHints: + v = QWidget::inputMethodQuery(property); + break; + default: + v = d->control->inputMethodQuery(property); + const QPoint offset(-d->horizontalOffset(), -d->verticalOffset()); + if (v.type() == QVariant::RectF) + v = v.toRectF().toRect().translated(offset); + else if (v.type() == QVariant::PointF) + v = v.toPointF().toPoint() + offset; + else if (v.type() == QVariant::Rect) + v = v.toRect().translated(offset); + else if (v.type() == QVariant::Point) + v = v.toPoint() + offset; + } + return v; } diff --git a/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp b/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp index 1052bb2103..79f5a1a3a3 100644 --- a/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp +++ b/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp @@ -148,6 +148,8 @@ private slots: void selectionChanged(); void blockCountChanged(); void insertAndScrollToBottom(); + void inputMethodQueryImHints_data(); + void inputMethodQueryImHints(); private: void createSelection(); @@ -1516,6 +1518,24 @@ void tst_QPlainTextEdit::insertAndScrollToBottom() QCOMPARE(ed->verticalScrollBar()->value(), ed->verticalScrollBar()->maximum()); } +Q_DECLARE_METATYPE(Qt::InputMethodHints) +void tst_QPlainTextEdit::inputMethodQueryImHints_data() +{ + QTest::addColumn("hints"); + + QTest::newRow("None") << static_cast(Qt::ImhNone); + QTest::newRow("Password") << static_cast(Qt::ImhHiddenText); + QTest::newRow("Normal") << static_cast(Qt::ImhNoAutoUppercase | Qt::ImhNoPredictiveText | Qt::ImhSensitiveData); +} + +void tst_QPlainTextEdit::inputMethodQueryImHints() +{ + QFETCH(Qt::InputMethodHints, hints); + ed->setInputMethodHints(hints); + + QVariant value = ed->inputMethodQuery(Qt::ImHints); + QCOMPARE(static_cast(value.toInt()), hints); +} QTEST_MAIN(tst_QPlainTextEdit) #include "tst_qplaintextedit.moc" diff --git a/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp b/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp index 88489f4328..6b6882e0cf 100644 --- a/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp +++ b/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp @@ -209,6 +209,8 @@ private slots: void inputMethodEvent(); void inputMethodSelection(); void inputMethodQuery(); + void inputMethodQueryImHints_data(); + void inputMethodQueryImHints(); private: void createSelection(); @@ -2462,5 +2464,24 @@ void tst_QTextEdit::inputMethodQuery() QCOMPARE(event.value(Qt::ImEnabled).toBool(), false); } +Q_DECLARE_METATYPE(Qt::InputMethodHints) +void tst_QTextEdit::inputMethodQueryImHints_data() +{ + QTest::addColumn("hints"); + + QTest::newRow("None") << static_cast(Qt::ImhNone); + QTest::newRow("Password") << static_cast(Qt::ImhHiddenText); + QTest::newRow("Normal") << static_cast(Qt::ImhNoAutoUppercase | Qt::ImhNoPredictiveText | Qt::ImhSensitiveData); +} + +void tst_QTextEdit::inputMethodQueryImHints() +{ + QFETCH(Qt::InputMethodHints, hints); + ed->setInputMethodHints(hints); + + QVariant value = ed->inputMethodQuery(Qt::ImHints); + QCOMPARE(static_cast(value.toInt()), hints); +} + QTEST_MAIN(tst_QTextEdit) #include "tst_qtextedit.moc" -- cgit v1.2.3