From 06fbda77e050dd2a44ecc11210f4b01a4bcdd6ce Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Blin?=
 <sebastien.blin@savoirfairelinux.com>
Date: Sat, 29 Aug 2020 13:45:07 -0400
Subject: [PATCH] chatview: correctly handle clicked links in the webview

Change-Id: I16edca89fe0e66fb3845cc0420c251c70c12bdec
Gitlab: #11
---
 src/mainview/components/MessageWebView.qml | 7 +++++++
 src/messagesadapter.cpp                    | 8 ++++++++
 src/messagesadapter.h                      | 1 +
 3 files changed, 16 insertions(+)

diff --git a/src/mainview/components/MessageWebView.qml b/src/mainview/components/MessageWebView.qml
index 1cb9242e9..98bdd48df 100644
--- a/src/mainview/components/MessageWebView.qml
+++ b/src/mainview/components/MessageWebView.qml
@@ -232,6 +232,13 @@ Rectangle {
             }
         }
 
+        onNavigationRequested: {
+            if(request.navigationType === WebEngineView.LinkClickedNavigation) {
+                MessagesAdapter.openUrl(request.url)
+                request.action = WebEngineView.IgnoreRequest
+            }
+        }
+
         onLoadingChanged: {
             if (loadRequest.status == WebEngineView.LoadSucceededStatus) {
                 messageWebView.runJavaScript(ClientWrapper.utilsAdaptor.getStyleSheet(
diff --git a/src/messagesadapter.cpp b/src/messagesadapter.cpp
index 1220aeb45..314d7b933 100644
--- a/src/messagesadapter.cpp
+++ b/src/messagesadapter.cpp
@@ -332,6 +332,14 @@ MessagesAdapter::openFile(const QString &arg)
     }
 }
 
+void
+MessagesAdapter::openUrl(const QString &url)
+{
+    if (!QDesktopServices::openUrl(url)) {
+        qDebug() << "Couldn't open url: " << url;
+    }
+}
+
 void
 MessagesAdapter::acceptFile(const QString &arg)
 {
diff --git a/src/messagesadapter.h b/src/messagesadapter.h
index 7a0c2f9e4..352cc3eec 100644
--- a/src/messagesadapter.h
+++ b/src/messagesadapter.h
@@ -49,6 +49,7 @@ public:
     Q_INVOKABLE void sendFile(const QString &message);
     Q_INVOKABLE void retryInteraction(const QString &arg);
     Q_INVOKABLE void deleteInteraction(const QString &arg);
+    Q_INVOKABLE void openUrl(const QString &url);
     Q_INVOKABLE void openFile(const QString &arg);
     Q_INVOKABLE void acceptFile(const QString &arg);
     Q_INVOKABLE void refuseFile(const QString &arg);
-- 
GitLab