diff options
-rw-r--r-- | src/quicktemplates2/qquicktextarea.cpp | 8 | ||||
-rw-r--r-- | src/quicktemplates2/qquicktextarea_p.h | 2 | ||||
-rw-r--r-- | tests/auto/controls/data/tst_textarea.qml | 24 |
3 files changed, 33 insertions, 1 deletions
diff --git a/src/quicktemplates2/qquicktextarea.cpp b/src/quicktemplates2/qquicktextarea.cpp index de69a279..b72a9b57 100644 --- a/src/quicktemplates2/qquicktextarea.cpp +++ b/src/quicktemplates2/qquicktextarea.cpp @@ -471,6 +471,14 @@ void QQuickTextArea::setFocusReason(Qt::FocusReason reason) emit focusReasonChanged(); } +bool QQuickTextArea::contains(const QPointF &point) const +{ + Q_D(const QQuickTextArea); + if (d->flickable && !d->flickable->contains(d->flickable->mapFromItem(this, point))) + return false; + return QQuickTextEdit::contains(point); +} + void QQuickTextArea::classBegin() { Q_D(QQuickTextArea); diff --git a/src/quicktemplates2/qquicktextarea_p.h b/src/quicktemplates2/qquicktextarea_p.h index 95aa61cf..f00943aa 100644 --- a/src/quicktemplates2/qquicktextarea_p.h +++ b/src/quicktemplates2/qquicktextarea_p.h @@ -86,6 +86,8 @@ public: Qt::FocusReason focusReason() const; void setFocusReason(Qt::FocusReason reason); + bool contains(const QPointF &point) const override; + Q_SIGNALS: void fontChanged(); void implicitWidthChanged3(); diff --git a/tests/auto/controls/data/tst_textarea.qml b/tests/auto/controls/data/tst_textarea.qml index c46aece8..bda0b3e3 100644 --- a/tests/auto/controls/data/tst_textarea.qml +++ b/tests/auto/controls/data/tst_textarea.qml @@ -154,7 +154,7 @@ TestCase { } function test_flickable() { - var control = flickable.createObject(testCase, {text:"line0"}) + var control = flickable.createObject(testCase, {text:"line0", selectByMouse: true}) verify(control) var textArea = control.TextArea.flickable @@ -169,6 +169,28 @@ TestCase { compare(control.contentWidth, textArea.contentWidth + textArea.leftPadding + textArea.rightPadding) compare(control.contentHeight, textArea.contentHeight + textArea.topPadding + textArea.bottomPadding) + compare(textArea.cursorPosition, 0) + + var center = textArea.positionAt(control.width / 2, control.height / 2) + verify(center > 0) + mouseClick(textArea, control.width / 2, control.height / 2) + compare(textArea.cursorPosition, center) + + // click inside text area, but below flickable + var below = textArea.positionAt(control.width / 2, control.height + 1) + verify(below > center) + mouseClick(textArea, control.width / 2, control.height + 1) + compare(textArea.cursorPosition, center) // no change + + // scroll down + control.contentY = -(control.contentHeight - control.height) / 2 + + // click inside textarea, but above flickable + var above = textArea.positionAt(control.width / 2, textArea.topPadding) + verify(above > 0 && above < center) + mouseClick(textArea, control.width / 2, 0) + compare(textArea.cursorPosition, center) // no change + control.destroy() } |