aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2016-07-07 16:45:26 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2016-07-11 11:21:06 +0000
commit3a7d3a8aa90e2b26a98eff1df0b93965976a699d (patch)
treec863aa8be4a3cd9c7eba29606cd45571422cffcc
parent46e0e527a50c9dc2bdc4f8eb21d1f4fec42ef6e8 (diff)
QQuickTextArea & -Field: fix double-click to select a word
The delayed/intercepted mouse press event must be passed first, before letting the base class handle the double-click event. Change-Id: I029d06b0b619f34bb7be13ae12b8904f2efe6b5b Task-number: QTBUG-54615 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
-rw-r--r--src/quicktemplates2/qquicktextarea.cpp10
-rw-r--r--src/quicktemplates2/qquicktextarea_p.h1
-rw-r--r--src/quicktemplates2/qquicktextfield.cpp10
-rw-r--r--src/quicktemplates2/qquicktextfield_p.h1
-rw-r--r--tests/auto/controls/data/tst_textarea.qml19
-rw-r--r--tests/auto/controls/data/tst_textfield.qml19
6 files changed, 60 insertions, 0 deletions
diff --git a/src/quicktemplates2/qquicktextarea.cpp b/src/quicktemplates2/qquicktextarea.cpp
index 11fe7393..de69a279 100644
--- a/src/quicktemplates2/qquicktextarea.cpp
+++ b/src/quicktemplates2/qquicktextarea.cpp
@@ -582,6 +582,16 @@ void QQuickTextArea::mouseReleaseEvent(QMouseEvent *event)
}
}
+void QQuickTextArea::mouseDoubleClickEvent(QMouseEvent *event)
+{
+ Q_D(QQuickTextArea);
+ if (d->pressHandler.delayedMousePressEvent) {
+ QQuickTextEdit::mousePressEvent(d->pressHandler.delayedMousePressEvent);
+ d->pressHandler.clearDelayedMouseEvent();
+ }
+ QQuickTextEdit::mouseDoubleClickEvent(event);
+}
+
void QQuickTextArea::timerEvent(QTimerEvent *event)
{
Q_D(QQuickTextArea);
diff --git a/src/quicktemplates2/qquicktextarea_p.h b/src/quicktemplates2/qquicktextarea_p.h
index 571b91c6..95aa61cf 100644
--- a/src/quicktemplates2/qquicktextarea_p.h
+++ b/src/quicktemplates2/qquicktextarea_p.h
@@ -108,6 +108,7 @@ protected:
void mousePressEvent(QMouseEvent *event) override;
void mouseMoveEvent(QMouseEvent *event) override;
void mouseReleaseEvent(QMouseEvent *event) override;
+ void mouseDoubleClickEvent(QMouseEvent *event) override;
void timerEvent(QTimerEvent *event) override;
private:
diff --git a/src/quicktemplates2/qquicktextfield.cpp b/src/quicktemplates2/qquicktextfield.cpp
index 18a5932a..e6b950e9 100644
--- a/src/quicktemplates2/qquicktextfield.cpp
+++ b/src/quicktemplates2/qquicktextfield.cpp
@@ -446,6 +446,16 @@ void QQuickTextField::mouseReleaseEvent(QMouseEvent *event)
}
}
+void QQuickTextField::mouseDoubleClickEvent(QMouseEvent *event)
+{
+ Q_D(QQuickTextField);
+ if (d->pressHandler.delayedMousePressEvent) {
+ QQuickTextInput::mousePressEvent(d->pressHandler.delayedMousePressEvent);
+ d->pressHandler.clearDelayedMouseEvent();
+ }
+ QQuickTextInput::mouseDoubleClickEvent(event);
+}
+
void QQuickTextField::timerEvent(QTimerEvent *event)
{
Q_D(QQuickTextField);
diff --git a/src/quicktemplates2/qquicktextfield_p.h b/src/quicktemplates2/qquicktextfield_p.h
index a3bcb69c..591d6edd 100644
--- a/src/quicktemplates2/qquicktextfield_p.h
+++ b/src/quicktemplates2/qquicktextfield_p.h
@@ -105,6 +105,7 @@ protected:
void mousePressEvent(QMouseEvent *event) override;
void mouseMoveEvent(QMouseEvent *event) override;
void mouseReleaseEvent(QMouseEvent *event) override;
+ void mouseDoubleClickEvent(QMouseEvent *event) override;
void timerEvent(QTimerEvent *event) override;
private:
diff --git a/tests/auto/controls/data/tst_textarea.qml b/tests/auto/controls/data/tst_textarea.qml
index 3afa7193..c46aece8 100644
--- a/tests/auto/controls/data/tst_textarea.qml
+++ b/tests/auto/controls/data/tst_textarea.qml
@@ -176,4 +176,23 @@ TestCase {
ignoreWarning(Qt.resolvedUrl("tst_textarea.qml") + ":45:1: QML TestCase: TextArea must be attached to a Flickable")
testCase.TextArea.flickable = null
}
+
+ function test_multiClick() {
+ var control = textArea.createObject(testCase, {text: "Qt Quick Controls 2 TextArea", selectByMouse: true})
+ verify(control)
+
+ waitForRendering(control)
+ control.width = control.contentWidth
+ var rect = control.positionToRectangle(12)
+
+ // double click -> select word
+ mouseDoubleClickSequence(control, rect.x + rect.width / 2, rect.y + rect.height / 2)
+ compare(control.selectedText, "Controls")
+
+ // tripple click -> select whole line
+ mouseClick(control, rect.x + rect.width / 2, rect.y + rect.height / 2)
+ compare(control.selectedText, "Qt Quick Controls 2 TextArea")
+
+ control.destroy()
+ }
}
diff --git a/tests/auto/controls/data/tst_textfield.qml b/tests/auto/controls/data/tst_textfield.qml
index 012dedba..f2907b36 100644
--- a/tests/auto/controls/data/tst_textfield.qml
+++ b/tests/auto/controls/data/tst_textfield.qml
@@ -144,4 +144,23 @@ TestCase {
control.destroy()
}
+
+ function test_multiClick() {
+ var control = textField.createObject(testCase, {text: "Qt Quick Controls 2 TextArea", selectByMouse: true})
+ verify(control)
+
+ waitForRendering(control)
+ control.width = control.contentWidth
+ var rect = control.positionToRectangle(12)
+
+ // double click -> select word
+ mouseDoubleClickSequence(control, rect.x + rect.width / 2, rect.y + rect.height / 2)
+ compare(control.selectedText, "Controls")
+
+ // tripple click -> select whole line
+ mouseClick(control, rect.x + rect.width / 2, rect.y + rect.height / 2)
+ compare(control.selectedText, "Qt Quick Controls 2 TextArea")
+
+ control.destroy()
+ }
}