summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gui/text/qtextcontrol.cpp7
-rw-r--r--tests/auto/qtextedit/tst_qtextedit.cpp41
2 files changed, 43 insertions, 5 deletions
diff --git a/src/gui/text/qtextcontrol.cpp b/src/gui/text/qtextcontrol.cpp
index aacac04..996d488 100644
--- a/src/gui/text/qtextcontrol.cpp
+++ b/src/gui/text/qtextcontrol.cpp
@@ -1628,16 +1628,13 @@ void QTextControlPrivate::mouseMoveEvent(QEvent *e, Qt::MouseButton button, cons
return;
}
- if (!mousePressed)
- return;
-
const qreal mouseX = qreal(mousePos.x());
int newCursorPos = q->hitTest(mousePos, Qt::FuzzyHit);
if (newCursorPos == -1)
return;
- if (wordSelectionEnabled && !selectedWordOnDoubleClick.hasSelection()) {
+ if (mousePressed && wordSelectionEnabled && !selectedWordOnDoubleClick.hasSelection()) {
selectedWordOnDoubleClick = cursor;
selectedWordOnDoubleClick.select(QTextCursor::WordUnderCursor);
}
@@ -1646,7 +1643,7 @@ void QTextControlPrivate::mouseMoveEvent(QEvent *e, Qt::MouseButton button, cons
extendBlockwiseSelection(newCursorPos);
else if (selectedWordOnDoubleClick.hasSelection())
extendWordwiseSelection(newCursorPos, mouseX);
- else
+ else if (mousePressed)
setCursorPosition(newCursorPos, QTextCursor::KeepAnchor);
if (interactionFlags & Qt::TextEditable) {
diff --git a/tests/auto/qtextedit/tst_qtextedit.cpp b/tests/auto/qtextedit/tst_qtextedit.cpp
index 42ea3b1..73d09f4 100644
--- a/tests/auto/qtextedit/tst_qtextedit.cpp
+++ b/tests/auto/qtextedit/tst_qtextedit.cpp
@@ -138,6 +138,8 @@ private slots:
void textSemantics();
#endif
void cursorPositionChanged();
+ void mouseSelection();
+ void mouseSelectionDClick();
void setTextCursor();
#ifndef QT_NO_CLIPBOARD
void undoAvailableAfterPaste();
@@ -785,6 +787,45 @@ void tst_QTextEdit::cursorPositionChanged()
QCOMPARE(ed->textCursor().position(), 0);
}
+void tst_QTextEdit::mouseSelection()
+{
+ ed->show();
+ ed->setPlainText(("Hello World"));
+ QTextCursor cursor = ed->textCursor();
+ cursor.setPosition(1);
+ QPoint p1 = ed->cursorRect(cursor).center();
+ cursor.setPosition(10);
+ QPoint p2 = ed->cursorRect(cursor).center();
+ QTest::mousePress(ed->viewport(), Qt::LeftButton, 0, p1);
+ { QMouseEvent ev(QEvent::MouseMove, p2, Qt::LeftButton, Qt::LeftButton, 0);
+ QCoreApplication::sendEvent(ed->viewport(), &ev); }
+ QTest::mouseRelease(ed->viewport(), Qt::LeftButton, 0, p2);
+ QVERIFY(ed->textCursor().hasSelection());
+ QCOMPARE(ed->textCursor().selectedText(), QString("ello Worl"));
+
+}
+
+void tst_QTextEdit::mouseSelectionDClick()
+{
+ ed->show();
+ ed->setPlainText(("Hello World"));
+ QTextCursor cursor = ed->textCursor();
+ cursor.setPosition(1);
+ QPoint p1 = ed->cursorRect(cursor).center();
+ cursor.setPosition(10);
+ QPoint p2 = ed->cursorRect(cursor).center();
+ QTest::mousePress(ed->viewport(), Qt::LeftButton, 0, p1);
+ QTest::mouseRelease(ed->viewport(), Qt::LeftButton, 0, p1);
+ QTest::mouseDClick(ed->viewport(), Qt::LeftButton, 0, p1);
+ QVERIFY(ed->textCursor().hasSelection());
+ QCOMPARE(ed->textCursor().selectedText(), QString("Hello"));
+ { QMouseEvent ev(QEvent::MouseMove, p2, Qt::LeftButton, Qt::LeftButton, 0);
+ QCoreApplication::sendEvent(ed->viewport(), &ev); }
+ QTest::mouseRelease(ed->viewport(), Qt::LeftButton, 0, p2);
+ QVERIFY(ed->textCursor().hasSelection());
+ QCOMPARE(ed->textCursor().selectedText(), QString("Hello World"));
+}
+
void tst_QTextEdit::setTextCursor()
{
QSignalSpy spy(ed, SIGNAL(cursorPositionChanged()));