summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@theqtcompany.com>2016-03-23 14:48:09 +0100
committerFriedemann Kleint <Friedemann.Kleint@theqtcompany.com>2016-03-30 07:12:57 +0000
commit086317d72a6b6964bf26df4ebedcb6d321b2d56b (patch)
treed2860a5e441409d32401f7109a6ed74e38d38479
parentc35795b413c6aedd6b02f03fdcaa5fb4888084d5 (diff)
QTextEdit::inputMethodQuery(): Preserve types when applying offset.
The old code converted QRectF into QRect when applying the offset. Change the offset point to QPointF and change the conversions accordingly. Add an autotest similar to that of QPlainTextEdit. This minimizes rounding errors and prevents conversions since the input method logic mostly uses qreal. Task-number: QTBUG-51923 Change-Id: I0c2f80ccae028d8bbbb97ec603f8782f69959c76 Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
-rw-r--r--src/widgets/widgets/qtextedit.cpp10
-rw-r--r--tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp13
2 files changed, 18 insertions, 5 deletions
diff --git a/src/widgets/widgets/qtextedit.cpp b/src/widgets/widgets/qtextedit.cpp
index 7439005b92..95f0bc7c59 100644
--- a/src/widgets/widgets/qtextedit.cpp
+++ b/src/widgets/widgets/qtextedit.cpp
@@ -1726,15 +1726,15 @@ QVariant QTextEdit::inputMethodQuery(Qt::InputMethodQuery query, QVariant argume
break;
default:
v = d->control->inputMethodQuery(query, argument);
- const QPoint offset(-d->horizontalOffset(), -d->verticalOffset());
+ const QPointF offset(-d->horizontalOffset(), -d->verticalOffset());
if (v.type() == QVariant::RectF)
- v = v.toRectF().toRect().translated(offset);
+ v = v.toRectF().translated(offset);
else if (v.type() == QVariant::PointF)
- v = v.toPointF().toPoint() + offset;
+ v = v.toPointF() + offset;
else if (v.type() == QVariant::Rect)
- v = v.toRect().translated(offset);
+ v = v.toRect().translated(offset.toPoint());
else if (v.type() == QVariant::Point)
- v = v.toPoint() + offset;
+ v = v.toPoint() + offset.toPoint();
}
return v;
diff --git a/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp b/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp
index 0cc812cbca..b81e4df123 100644
--- a/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp
+++ b/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp
@@ -191,6 +191,7 @@ private slots:
void inputMethodQuery();
void inputMethodQueryImHints_data();
void inputMethodQueryImHints();
+ void inputMethodCursorRect();
void highlightLongLine();
@@ -2473,6 +2474,18 @@ void tst_QTextEdit::inputMethodQueryImHints()
QCOMPARE(static_cast<Qt::InputMethodHints>(value.toInt()), hints);
}
+// QTBUG-51923: Verify that the cursor rectangle returned by the input
+// method query correctly reflects the viewport offset.
+void tst_QTextEdit::inputMethodCursorRect()
+{
+ ed->setPlainText("Line1\nLine2Line3\nLine3");
+ ed->moveCursor(QTextCursor::End);
+ const QRectF cursorRect = ed->cursorRect();
+ const QVariant cursorRectV = ed->inputMethodQuery(Qt::ImCursorRectangle);
+ QCOMPARE(cursorRectV.type(), QVariant::RectF);
+ QCOMPARE(cursorRectV.toRect(), cursorRect.toRect());
+}
+
void tst_QTextEdit::highlightLongLine()
{
QTextEdit edit;