From 285417a2d8eb560c60adb19f2795197d76fa3866 Mon Sep 17 00:00:00 2001 From: luddens Date: Fri, 13 Mar 2020 00:54:31 +0100 Subject: [PATCH] Ctrl + Click and middle click on external link don't open a new empty tab Connect the &QWebEnginePage::linkHovered signal to set the m_linkHovered member. The Ctrl + Click and middle click events are intercepted to directly open the m_linkHovered variable if it's an external link --- src/webview.cpp | 13 +++++++++++++ src/webview.h | 1 + 2 files changed, 14 insertions(+) diff --git a/src/webview.cpp b/src/webview.cpp index 96d53fd..da51a54 100644 --- a/src/webview.cpp +++ b/src/webview.cpp @@ -1,5 +1,6 @@ #include "webview.h" +#include #include #include #include "kiwixapp.h" @@ -12,6 +13,9 @@ WebView::WebView(QWidget *parent) { setPage(new WebPage(this)); QObject::connect(this, &QWebEngineView::urlChanged, this, &WebView::onUrlChanged); + connect(this->page(), &QWebEnginePage::linkHovered, this, [=] (const QString& url) { + m_linkHovered = url; + }); } WebView::~WebView() @@ -75,6 +79,15 @@ bool WebView::eventFilter(QObject *src, QEvent *e) if (we->modifiers() == Qt::ControlModifier) return true; } + if (e->type() == QEvent::MouseButtonRelease) { + auto me = static_cast(e); + if (!m_linkHovered.startsWith("zim://") + && (me->modifiers() == Qt::ControlModifier || me->button() == Qt::MiddleButton)) + { + QDesktopServices::openUrl(m_linkHovered); + return true; + } + } return false; } diff --git a/src/webview.h b/src/webview.h index eb258cc..c377ea9 100644 --- a/src/webview.h +++ b/src/webview.h @@ -36,6 +36,7 @@ protected: QString m_currentZimId; QIcon m_icon; + QString m_linkHovered; }; #endif // WEBVIEW_H