{
Q_Q(QQuickTextControl);
- mousePressed = (interactionFlags & Qt::TextSelectableByMouse);
+ mousePressed = (interactionFlags & Qt::TextSelectableByMouse) && (e->button() & Qt::LeftButton);
mousePressPos = pos.toPoint();
if (sendMouseEventToInputContext(e, pos))
cursor.clearSelection();
}
}
- if (!(e->button() & Qt::LeftButton)) {
+ if (e->button() & Qt::MiddleButton) {
+ return;
+ } else if (!(e->button() & Qt::LeftButton)) {
e->ignore();
return;
} else if (!(interactionFlags & (Qt::TextSelectableByMouse | Qt::TextEditable))) {
{
Q_Q(QQuickTextEdit);
- q->setAcceptedMouseButtons(Qt::LeftButton);
+#ifndef QT_NO_CLIPBOARD
+ if (QGuiApplication::clipboard()->supportsSelection())
+ q->setAcceptedMouseButtons(Qt::LeftButton | Qt::MiddleButton);
+ else
+#endif
+ q->setAcceptedMouseButtons(Qt::LeftButton);
+
q->setFlag(QQuickItem::ItemAcceptsInputMethod);
q->setFlag(QQuickItem::ItemHasContents);
void QQuickTextInputPrivate::init()
{
Q_Q(QQuickTextInput);
- q->setAcceptedMouseButtons(Qt::LeftButton);
+#ifndef QT_NO_CLIPBOARD
+ if (QGuiApplication::clipboard()->supportsSelection())
+ q->setAcceptedMouseButtons(Qt::LeftButton | Qt::MiddleButton);
+ else
+#endif
+ q->setAcceptedMouseButtons(Qt::LeftButton);
+
q->setFlag(QQuickItem::ItemAcceptsInputMethod);
q->setFlag(QQuickItem::ItemHasContents);
#ifndef QT_NO_CLIPBOARD
void copyAndPaste();
void canPaste();
void canPasteEmpty();
+ void middleClickPaste();
void textInput();
void inputMethodUpdate();
void openInputPanel();
}
+void tst_qquicktextedit::middleClickPaste()
+{
+#ifndef QT_NO_CLIPBOARD
+
+#ifdef Q_OS_MAC
+ {
+ PasteboardRef pasteboard;
+ OSStatus status = PasteboardCreate(0, &pasteboard);
+ if (status == noErr)
+ CFRelease(pasteboard);
+ else
+ QSKIP("This machine doesn't support the clipboard");
+ }
+#endif
+
+ QQuickView window(testFileUrl("mouseselection_true.qml"));
+
+ window.show();
+ window.requestActivateWindow();
+ QTest::qWaitForWindowActive(&window);
+
+ QVERIFY(window.rootObject() != 0);
+ QQuickTextEdit *textEditObject = qobject_cast<QQuickTextEdit *>(window.rootObject());
+ QVERIFY(textEditObject != 0);
+
+ textEditObject->setFocus(true);
+
+ QString originalText = textEditObject->text();
+ QString selectedText = "234567";
+
+ // press-and-drag-and-release from x1 to x2
+ const QPoint p1 = textEditObject->positionToRectangle(2).center().toPoint();
+ const QPoint p2 = textEditObject->positionToRectangle(8).center().toPoint();
+ const QPoint p3 = textEditObject->positionToRectangle(1).center().toPoint();
+ QTest::mousePress(&window, Qt::LeftButton, Qt::NoModifier, p1);
+ QTest::mouseMove(&window, p2);
+ QTest::mouseRelease(&window, Qt::LeftButton, Qt::NoModifier, p2);
+ QTRY_COMPARE(textEditObject->selectedText(), selectedText);
+
+ // Middle click pastes the selected text, assuming the platform supports it.
+ QTest::mouseClick(&window, Qt::MiddleButton, Qt::NoModifier, p3);
+
+ // ### This is to prevent double click detection from carrying over to the next test.
+ QTest::qWait(QGuiApplication::styleHints()->mouseDoubleClickInterval() + 10);
+
+ if (QGuiApplication::clipboard()->supportsSelection())
+ QCOMPARE(textEditObject->text().mid(1, selectedText.length()), selectedText);
+ else
+ QCOMPARE(textEditObject->text(), originalText);
+#endif
+}
+
void tst_qquicktextedit::readOnly()
{
QQuickView window(testFileUrl("readOnly.qml"));
void copyAndPasteKeySequence();
void canPasteEmpty();
void canPaste();
+ void middleClickPaste();
void readOnly();
void focusOnPress();
#endif
}
+void tst_qquicktextinput::middleClickPaste()
+{
+#ifndef QT_NO_CLIPBOARD
+
+#ifdef Q_OS_MAC
+ {
+ PasteboardRef pasteboard;
+ OSStatus status = PasteboardCreate(0, &pasteboard);
+ if (status == noErr)
+ CFRelease(pasteboard);
+ else
+ QSKIP("This machine doesn't support the clipboard");
+ }
+#endif
+
+ QQuickView window(testFileUrl("mouseselection_true.qml"));
+
+ window.show();
+ window.requestActivateWindow();
+ QTest::qWaitForWindowActive(&window);
+
+ QVERIFY(window.rootObject() != 0);
+ QQuickTextInput *textInputObject = qobject_cast<QQuickTextInput *>(window.rootObject());
+ QVERIFY(textInputObject != 0);
+
+ textInputObject->setFocus(true);
+
+ QString originalText = textInputObject->text();
+ QString selectedText = "234567";
+
+ // press-and-drag-and-release from x1 to x2
+ const QPoint p1 = textInputObject->positionToRectangle(2).center().toPoint();
+ const QPoint p2 = textInputObject->positionToRectangle(8).center().toPoint();
+ const QPoint p3 = textInputObject->positionToRectangle(1).center().toPoint();
+ QTest::mousePress(&window, Qt::LeftButton, Qt::NoModifier, p1);
+ QTest::mouseMove(&window, p2);
+ QTest::mouseRelease(&window, Qt::LeftButton, Qt::NoModifier, p2);
+ QTRY_COMPARE(textInputObject->selectedText(), selectedText);
+
+ // Middle click pastes the selected text, assuming the platform supports it.
+ QTest::mouseClick(&window, Qt::MiddleButton, Qt::NoModifier, p3);
+
+ // ### This is to prevent double click detection from carrying over to the next test.
+ QTest::qWait(QGuiApplication::styleHints()->mouseDoubleClickInterval() + 10);
+
+ if (QGuiApplication::clipboard()->supportsSelection())
+ QCOMPARE(textInputObject->text().mid(1, selectedText.length()), selectedText);
+ else
+ QCOMPARE(textInputObject->text(), originalText);
+#endif
+}
+
void tst_qquicktextinput::passwordCharacter()
{
QString componentStr = "import QtQuick 2.0\nTextInput { text: \"Hello world!\"; font.family: \"Helvetica\"; echoMode: TextInput.Password }";