From 977a335ccd16e162d1aeaf0ab569afe98faed0f4 Mon Sep 17 00:00:00 2001
From: J-P Nurmi <jpnurmi@digia.com>
Date: Wed, 22 Jan 2014 15:38:43 +0200
Subject: [PATCH] Expose TextEdit::linkAt(x, y)

[ChangeLog][QtQuick] Added TextEdit::linkAt(x,y) method.

Task-number: QTBUG-18946
Change-Id: Id9d061e6c9d857c2f0283ad5042097828d1ed02d
Reviewed-by: Martin Jones <martin.jones@jollamobile.com>
Reviewed-by: Jens Bache-Wiig <jens.bache-wiig@digia.com>
Reviewed-by: Alan Alpert <aalpert@blackberry.com>
---
 src/quick/items/qquickitemsmodule.cpp         |  1 +
 src/quick/items/qquicktextedit.cpp            | 19 +++++++++++++++++--
 src/quick/items/qquicktextedit_p.h            |  2 ++
 .../qquicktextedit/tst_qquicktextedit.cpp     |  4 ++++
 4 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/src/quick/items/qquickitemsmodule.cpp b/src/quick/items/qquickitemsmodule.cpp
index 4652bdf98e..a52ccf4832 100644
--- a/src/quick/items/qquickitemsmodule.cpp
+++ b/src/quick/items/qquickitemsmodule.cpp
@@ -271,6 +271,7 @@ static void qt_quickitems_defineModule(const char *uri, int major, int minor)
     qmlRegisterType<QQuickTextEdit, 2>(uri, 2, 2, "TextEdit");
 
     qmlRegisterType<QQuickText, 3>(uri, 2, 3, "Text");
+    qmlRegisterType<QQuickTextEdit, 3>(uri, 2, 3, "TextEdit");
 }
 
 static void initResources()
diff --git a/src/quick/items/qquicktextedit.cpp b/src/quick/items/qquicktextedit.cpp
index 38a40a9e81..810a47cfa8 100644
--- a/src/quick/items/qquicktextedit.cpp
+++ b/src/quick/items/qquicktextedit.cpp
@@ -2515,7 +2515,7 @@ bool QQuickTextEditPrivate::isLinkHoveredConnected()
     The link must be in rich text or HTML format and the
     \a link string provides access to the particular link.
 
-    \sa hoveredLink
+    \sa hoveredLink, linkAt()
 */
 
 /*!
@@ -2526,7 +2526,7 @@ bool QQuickTextEditPrivate::isLinkHoveredConnected()
     embedded in the text. The link must be in rich text or HTML format
     and the link string provides access to the particular link.
 
-    \sa onLinkHovered
+    \sa onLinkHovered, linkAt()
 */
 
 QString QQuickTextEdit::hoveredLink() const
@@ -2599,4 +2599,19 @@ void QQuickTextEdit::append(const QString &text)
     d->control->updateCursorRectangle(false);
 }
 
+/*!
+    \qmlmethod QtQuick::TextEdit::linkAt(real x, real y)
+    \since 5.3
+
+    Returns the link string at point \a x, \a y in content coordinates,
+    or an empty string if no link exists at that point.
+
+    \sa hoveredLink
+*/
+QString QQuickTextEdit::linkAt(qreal x, qreal y) const
+{
+    Q_D(const QQuickTextEdit);
+    return d->control->anchorAt(QPointF(x, y));
+}
+
 QT_END_NAMESPACE
diff --git a/src/quick/items/qquicktextedit_p.h b/src/quick/items/qquicktextedit_p.h
index 8057f76be5..b84552d255 100644
--- a/src/quick/items/qquicktextedit_p.h
+++ b/src/quick/items/qquicktextedit_p.h
@@ -258,6 +258,8 @@ public:
 
     QString hoveredLink() const;
 
+    Q_REVISION(3) Q_INVOKABLE QString linkAt(qreal x, qreal y) const;
+
 Q_SIGNALS:
     void textChanged();
     void contentSizeChanged();
diff --git a/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp b/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp
index 8bf9d14a56..e6a83b3338 100644
--- a/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp
+++ b/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp
@@ -2393,12 +2393,14 @@ void tst_qquicktextedit::linkInteraction()
     QCOMPARE(spy.last()[0].toString(), link);
     QCOMPARE(hover.last()[0].toString(), link);
     QCOMPARE(texteditObject->hoveredLink(), link);
+    QCOMPARE(texteditObject->linkAt(linkPos.x(), linkPos.y()), link);
 
     QTest::mouseClick(&window, Qt::LeftButton, 0, textPos.toPoint());
     QTRY_COMPARE(spy.count(), 1);
     QTRY_COMPARE(hover.count(), 2);
     QCOMPARE(hover.last()[0].toString(), QString());
     QCOMPARE(texteditObject->hoveredLink(), QString());
+    QCOMPARE(texteditObject->linkAt(textPos.x(), textPos.y()), QString());
 
     texteditObject->setReadOnly(true);
 
@@ -2408,12 +2410,14 @@ void tst_qquicktextedit::linkInteraction()
     QCOMPARE(spy.last()[0].toString(), link);
     QCOMPARE(hover.last()[0].toString(), link);
     QCOMPARE(texteditObject->hoveredLink(), link);
+    QCOMPARE(texteditObject->linkAt(linkPos.x(), linkPos.y()), link);
 
     QTest::mouseClick(&window, Qt::LeftButton, 0, textPos.toPoint());
     QTRY_COMPARE(spy.count(), 2);
     QTRY_COMPARE(hover.count(), 4);
     QCOMPARE(hover.last()[0].toString(), QString());
     QCOMPARE(texteditObject->hoveredLink(), QString());
+    QCOMPARE(texteditObject->linkAt(textPos.x(), textPos.y()), QString());
 }
 
 void tst_qquicktextedit::cursorDelegate_data()
-- 
GitLab