aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2016-07-22 10:25:24 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2016-07-22 15:19:36 +0000
commitcc0ee8e4f3345023f1b85fc815739c0a75ea5686 (patch)
tree87ee5d35c23f3ea44f0737867221d794646d3a02
parent92032bee2923024d126bc20929f79abd459cae49 (diff)
Flickable TextArea: don't intercept input events outside visual bounds
Task-number: QTBUG-54897 Change-Id: I4e5cd0e175fa5dc2399bb80150ac538912a5b542 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
-rw-r--r--src/quicktemplates2/qquicktextarea.cpp8
-rw-r--r--src/quicktemplates2/qquicktextarea_p.h2
-rw-r--r--tests/auto/controls/data/tst_textarea.qml24
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()
}