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