summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/widgets/widgets/qplaintextedit.cpp10
-rw-r--r--tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp13
2 files changed, 18 insertions, 5 deletions
diff --git a/src/widgets/widgets/qplaintextedit.cpp b/src/widgets/widgets/qplaintextedit.cpp
index 91788a3383..bb933362da 100644
--- a/src/widgets/widgets/qplaintextedit.cpp
+++ b/src/widgets/widgets/qplaintextedit.cpp
@@ -2198,15 +2198,15 @@ QVariant QPlainTextEdit::inputMethodQuery(Qt::InputMethodQuery property, QVarian
break;
default:
v = d->control->inputMethodQuery(property, argument);
- const QPoint offset(-d->horizontalOffset(), -0);
+ const QPointF offset = contentOffset();
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/qplaintextedit/tst_qplaintextedit.cpp b/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp
index 2145260013..d466489acb 100644
--- a/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp
+++ b/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp
@@ -154,6 +154,7 @@ private slots:
#ifndef QT_NO_CONTEXTMENU
void contextMenu();
#endif
+ void inputMethodCursorRect();
private:
void createSelection();
@@ -1727,5 +1728,17 @@ void tst_QPlainTextEdit::contextMenu()
}
#endif // QT_NO_CONTEXTMENU
+// QTBUG-51923: Verify that the cursor rectangle returned by the input
+// method query correctly reflects the viewport offset.
+void tst_QPlainTextEdit::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());
+}
+
QTEST_MAIN(tst_QPlainTextEdit)
#include "tst_qplaintextedit.moc"