From 873e7ac5ee0cffc31f7364d00629ae834bb7384b Mon Sep 17 00:00:00 2001 From: Jacopo De Simoi Date: Wed, 28 Oct 2020 23:40:33 -0400 Subject: [PATCH] Put in a working implementation This has some issues: - no feedback - it shows up even when the keys should be captured by some lineedits --- src/lib/webengine/webpage.cpp | 4 ++++ src/lib/webengine/webpage.h | 2 ++ src/lib/webengine/webview.cpp | 45 +++++++++++++++++++++++++---------- src/lib/webengine/webview.h | 1 + 4 files changed, 39 insertions(+), 13 deletions(-) diff --git a/src/lib/webengine/webpage.cpp b/src/lib/webengine/webpage.cpp index c0c37fcb7..41984e96b 100644 --- a/src/lib/webengine/webpage.cpp +++ b/src/lib/webengine/webpage.cpp @@ -694,6 +694,10 @@ void WebPage::javaScriptConsoleMessage(JavaScriptConsoleMessageLevel level, cons std::cout << qPrintable(sourceID) << ":" << lineNumber << " " << qPrintable(message); } +void WebPage::followLinkMarker(QString label) { + runJavaScript("Marker.gotoMarker('"+label+"',Marker.getMarkerLink)",[this](const QVariant& v) { QString url=v.toString(); if (!url.isEmpty()) load(v.toUrl());}); +} + void WebPage::showLinkMarkers() { runJavaScript("Marker.generateMarker('a, input, button, [class*=\"btn\"], [aria-haspopup], [role=\"button\"], textarea, select, summary, [class=\"gap\"], [ng-click]')"); } diff --git a/src/lib/webengine/webpage.h b/src/lib/webengine/webpage.h index 915d1676b..1334c7653 100644 --- a/src/lib/webengine/webpage.h +++ b/src/lib/webengine/webpage.h @@ -78,6 +78,8 @@ public: static void removeSupportedScheme(const QString &scheme); void showLinkMarkers(); + void followLinkMarker(QString); + void markerCallback(const QVariant &); Q_SIGNALS: void privacyChanged(bool status); diff --git a/src/lib/webengine/webview.cpp b/src/lib/webengine/webview.cpp index 2466c90a7..a26b27263 100644 --- a/src/lib/webengine/webview.cpp +++ b/src/lib/webengine/webview.cpp @@ -61,6 +61,7 @@ WebView::WebView(QWidget* parent) , m_page(0) , m_firstLoad(false) , m_followLink(false) + , m_currentLinkMarkerLabel() { connect(this, &QWebEngineView::loadStarted, this, &WebView::slotLoadStarted); connect(this, &QWebEngineView::loadProgress, this, &WebView::slotLoadProgress); @@ -1199,24 +1200,42 @@ void WebView::_keyReleaseEvent(QKeyEvent *event) event->accept(); } - switch (event->key()) { - case Qt::Key_Escape: - if (isFullScreen()) { - triggerPageAction(QWebEnginePage::ExitFullScreen); + if (m_followLink) { + // We are following links; therefore we need to process the + // key + switch (event->key()) { + case Qt::Key_Space: + // Accept current label + page()->followLinkMarker(m_currentLinkMarkerLabel); + case Qt::Key_Escape: + page()->hideLinkMarkers(); + m_currentLinkMarkerLabel=QString(); + m_followLink = false; event->accept(); + break; + + default: + m_currentLinkMarkerLabel += event->text(); + qDebug() << "process letter" << m_currentLinkMarkerLabel; + break; } - break; - case Qt::Key_F: - if (!m_followLink) { + } else { + switch (event->key()) { + case Qt::Key_Escape: + if (isFullScreen()) { + triggerPageAction(QWebEnginePage::ExitFullScreen); + event->accept(); + } + break; + case Qt::Key_F: page()->showLinkMarkers(); + qDebug() << "markers activated"; m_followLink = true; - } else { - page()->hideLinkMarkers(); - m_followLink = false; + event->accept(); + break; + default: + break; } - event->accept(); - default: - break; } } diff --git a/src/lib/webengine/webview.h b/src/lib/webengine/webview.h index 5b0885911..b2fa993e9 100644 --- a/src/lib/webengine/webview.h +++ b/src/lib/webengine/webview.h @@ -189,6 +189,7 @@ private: WebPage* m_page; bool m_firstLoad; bool m_followLink; + QString m_currentLinkMarkerLabel; QPointer m_rwhvqt; WheelHelper m_wheelHelper;