Przeglądaj źródła

show hover link

Le Tan 4 lat temu
rodzic
commit
66554819a6

+ 3 - 14
src/widgets/editors/markdownviewer.cpp

@@ -7,7 +7,6 @@
 #include <QMimeData>
 #include <QScopedPointer>
 
-#include "../webpage.h"
 #include "markdownvieweradapter.h"
 #include "previewhelper.h"
 #include <utils/clipboardutils.h>
@@ -28,25 +27,15 @@ MarkdownViewer::MarkdownViewer(MarkdownViewerAdapter *p_adapter,
                                const QColor &p_background,
                                qreal p_zoomFactor,
                                QWidget *p_parent)
-    : WebViewer(p_parent),
+    : WebViewer(p_background, p_zoomFactor, p_parent),
       m_adapter(p_adapter)
 {
     m_adapter->setParent(this);
 
-    auto page = new WebPage(this);
-    setPage(page);
-
-    // Avoid white flash before loading content.
-    // Setting Qt::transparent will force GrayScale antialias rendering.
-    page->setBackgroundColor(p_background);
-
-    if (!Utils::fuzzyEqual(p_zoomFactor, 1.0)) {
-        setZoomFactor(p_zoomFactor);
-    }
-
     auto channel = new QWebChannel(this);
     channel->registerObject(QStringLiteral("vxAdapter"), m_adapter);
-    page->setWebChannel(channel);
+
+    page()->setWebChannel(channel);
 
     connect(QApplication::clipboard(), &QClipboard::changed,
             this, &MarkdownViewer::handleClipboardChanged);

+ 5 - 0
src/widgets/markdownviewwindow.cpp

@@ -414,6 +414,11 @@ void MarkdownViewWindow::setupViewer()
                 showZoomFactor(p_factor);
             });
 
+    connect(m_viewer, &WebViewer::linkHovered,
+            this, [this](const QString &p_url) {
+                showMessage(p_url);
+            });
+
     // Connect outline pipeline.
     connect(adapter, &MarkdownViewerAdapter::headingsChanged,
             this, [this]() {

+ 21 - 2
src/widgets/webviewer.cpp

@@ -1,14 +1,33 @@
 #include "webviewer.h"
 
+#include "webpage.h"
+
+#include <utils/utils.h>
+
 using namespace vnotex;
 
-WebViewer::WebViewer(QWidget *p_parent)
+WebViewer::WebViewer(const QColor &p_background,
+                     qreal p_zoomFactor,
+                     QWidget *p_parent)
     : QWebEngineView(p_parent)
 {
     setAcceptDrops(false);
+
+    auto viewPage = new WebPage(this);
+    setPage(viewPage);
+
+    connect(viewPage, &QWebEnginePage::linkHovered,
+            this, &WebViewer::linkHovered);
+
+    // Avoid white flash before loading content.
+    // Setting Qt::transparent will force GrayScale antialias rendering.
+    viewPage->setBackgroundColor(p_background);
+
+    if (!Utils::fuzzyEqual(p_zoomFactor, 1.0)) {
+        setZoomFactor(p_zoomFactor);
+    }
 }
 
 WebViewer::~WebViewer()
 {
-
 }

+ 6 - 1
src/widgets/webviewer.h

@@ -9,9 +9,14 @@ namespace vnotex
     {
         Q_OBJECT
     public:
-        explicit WebViewer(QWidget *p_parent = nullptr);
+        explicit WebViewer(const QColor &p_background,
+                           qreal p_zoomFactor,
+                           QWidget *p_parent = nullptr);
 
         virtual ~WebViewer();
+
+    signals:
+        void linkHovered(const QString &p_url);
     };
 }