aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/quick/items/qquicktext.cpp25
-rw-r--r--tests/auto/quick/qquicktext/data/hover.qml22
-rw-r--r--tests/auto/quick/qquicktext/tst_qquicktext.cpp28
3 files changed, 63 insertions, 12 deletions
diff --git a/src/quick/items/qquicktext.cpp b/src/quick/items/qquicktext.cpp
index 6335c83b2b..d62bf8efa1 100644
--- a/src/quick/items/qquicktext.cpp
+++ b/src/quick/items/qquicktext.cpp
@@ -107,7 +107,6 @@ void QQuickTextPrivate::init()
Q_Q(QQuickText);
q->setAcceptedMouseButtons(Qt::LeftButton);
q->setFlag(QQuickItem::ItemHasContents);
- q->setAcceptHoverEvents(true);
}
QQuickTextDocumentWithImageResources::QQuickTextDocumentWithImageResources(QQuickItem *parent)
@@ -1523,6 +1522,7 @@ void QQuickText::setText(const QString &n)
qDeleteAll(d->imgTags);
d->imgTags.clear();
d->updateLayout();
+ setAcceptHoverEvents(d->richText || d->styledText);
emit textChanged(d->text);
}
@@ -2002,6 +2002,7 @@ void QQuickText::setTextFormat(TextFormat format)
d->determineHorizontalAlignment();
}
d->updateLayout();
+ setAcceptHoverEvents(d->richText || d->styledText);
emit textFormatChanged(d->format);
}
@@ -2634,34 +2635,34 @@ void QQuickTextPrivate::processHoverEvent(QHoverEvent *event)
{
Q_Q(QQuickText);
QString link;
- if (event->type() != QEvent::HoverLeave)
- link = anchorAt(event->posF());
+ if (isLinkHoveredConnected()) {
+ if (event->type() != QEvent::HoverLeave)
+ link = anchorAt(event->posF());
- if ((!extra.isAllocated() && !link.isEmpty()) || (extra.isAllocated() && extra->hoveredLink != link)) {
- extra.value().hoveredLink = link;
- emit q->linkHovered(extra->hoveredLink);
+ if ((!extra.isAllocated() && !link.isEmpty()) || (extra.isAllocated() && extra->hoveredLink != link)) {
+ extra.value().hoveredLink = link;
+ emit q->linkHovered(extra->hoveredLink);
+ }
}
+ event->setAccepted(!link.isEmpty());
}
void QQuickText::hoverEnterEvent(QHoverEvent *event)
{
Q_D(QQuickText);
- if (d->isLinkHoveredConnected())
- d->processHoverEvent(event);
+ d->processHoverEvent(event);
}
void QQuickText::hoverMoveEvent(QHoverEvent *event)
{
Q_D(QQuickText);
- if (d->isLinkHoveredConnected())
- d->processHoverEvent(event);
+ d->processHoverEvent(event);
}
void QQuickText::hoverLeaveEvent(QHoverEvent *event)
{
Q_D(QQuickText);
- if (d->isLinkHoveredConnected())
- d->processHoverEvent(event);
+ d->processHoverEvent(event);
}
QT_END_NAMESPACE
diff --git a/tests/auto/quick/qquicktext/data/hover.qml b/tests/auto/quick/qquicktext/data/hover.qml
new file mode 100644
index 0000000000..36d9b5c691
--- /dev/null
+++ b/tests/auto/quick/qquicktext/data/hover.qml
@@ -0,0 +1,22 @@
+import QtQuick 2.1
+import QtQuick.Window 2.1
+
+Window {
+ width: 100
+ height: 100
+ property alias mouseArea: mouseArea
+ property alias textItem: textItem
+ MouseArea {
+ id: mouseArea
+ hoverEnabled: true
+ anchors.fill: parent
+ acceptedButtons: Qt.NoButton
+ property bool wasHovered: false
+ onPositionChanged: wasHovered = true
+ Text {
+ id: textItem
+ text: "plain text"
+ anchors.fill: parent
+ }
+ }
+}
diff --git a/tests/auto/quick/qquicktext/tst_qquicktext.cpp b/tests/auto/quick/qquicktext/tst_qquicktext.cpp
index 6b93791545..78e03be9c2 100644
--- a/tests/auto/quick/qquicktext/tst_qquicktext.cpp
+++ b/tests/auto/quick/qquicktext/tst_qquicktext.cpp
@@ -44,6 +44,7 @@
#include <QtQml/qqmlengine.h>
#include <QtQml/qqmlcomponent.h>
#include <QtQuick/private/qquicktext_p.h>
+#include <QtQuick/private/qquickmousearea_p.h>
#include <private/qquicktext_p_p.h>
#include <private/qquickvaluetypes_p.h>
#include <QFontMetrics>
@@ -151,6 +152,8 @@ private slots:
void elideBeforeMaximumLineCount();
+ void hover();
+
private:
QStringList standard;
QStringList richText;
@@ -3744,6 +3747,31 @@ void tst_qquicktext::elideBeforeMaximumLineCount()
QCOMPARE(item->lineCount(), 2);
}
+void tst_qquicktext::hover()
+{ // QTBUG-33842
+ QQmlComponent component(&engine, testFile("hover.qml"));
+
+ QScopedPointer<QObject> object(component.create());
+
+ QQuickWindow *window = qobject_cast<QQuickWindow *>(object.data());
+ QVERIFY(window);
+
+ QQuickMouseArea *mouseArea = window->property("mouseArea").value<QQuickMouseArea *>();
+ QVERIFY(mouseArea);
+ QQuickText *textItem = window->property("textItem").value<QQuickText *>();
+ QVERIFY(textItem);
+
+ QVERIFY(!mouseArea->property("wasHovered").toBool());
+
+ QPoint center(window->width() / 2, window->height() / 2);
+ QPoint delta(window->width() / 10, window->height() / 10);
+
+ QTest::mouseMove(window, center - delta);
+ QTest::mouseMove(window, center + delta);
+
+ QVERIFY(mouseArea->property("wasHovered").toBool());
+}
+
QTEST_MAIN(tst_qquicktext)
#include "tst_qquicktext.moc"