From e4d78dc1a237ff6f538bdde6842b6d51c4d1886f Mon Sep 17 00:00:00 2001 From: "i.Dark_Templar" <darktemplar@dark-templar-archives.net> Date: Fri, 11 Jun 2021 19:03:31 +0300 Subject: [PATCH 1/3] qtwebengine doesn't have linkClicked signal --- src/viewwindowmgr.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/viewwindowmgr.cpp b/src/viewwindowmgr.cpp index 3b4f521..29a21fc 100644 --- a/src/viewwindowmgr.cpp +++ b/src/viewwindowmgr.cpp @@ -142,11 +142,13 @@ ViewWindow * ViewWindowMgr::addNewTab( bool set_active ) if ( set_active || m_Windows.size() == 1 ) m_tabWidget->setCurrentWidget( tabdata.widget ); +#if defined (USE_WEBKIT) // Handle clicking on link in browser window connect( viewvnd, SIGNAL( linkClicked ( const QUrl& ) ), ::mainWindow, SLOT( activateUrl( const QUrl& ) ) ); +#endif connect( viewvnd, SIGNAL(dataLoaded(ViewWindow*)), this, SLOT(onWindowContentChanged(ViewWindow*))); From 0c2e2503de5821bda2bb2a006982a7f41bc84cd2 Mon Sep 17 00:00:00 2001 From: "i.Dark_Templar" <darktemplar@dark-templar-archives.net> Date: Fri, 11 Jun 2021 20:39:05 +0300 Subject: [PATCH 2/3] qtwebengine: implement opening additional windows except for dialogs --- src/viewwindow_webengine.cpp | 30 ++++++++++++++++++++++++++++++ src/viewwindow_webengine.h | 2 ++ 2 files changed, 32 insertions(+) diff --git a/src/viewwindow_webengine.cpp b/src/viewwindow_webengine.cpp index 34f3396..df3859f 100644 --- a/src/viewwindow_webengine.cpp +++ b/src/viewwindow_webengine.cpp @@ -290,6 +290,36 @@ void ViewWindow::contextMenuEvent(QContextMenuEvent *e) delete m; } +QWebEngineView *ViewWindow::createWindow(QWebEnginePage::WebWindowType type) +{ + QWebEngineView *tab = nullptr; + + switch (type) + { + case QWebEnginePage::WebBrowserWindow: + case QWebEnginePage::WebBrowserTab: + case QWebEnginePage::WebBrowserBackgroundTab: + { + bool active = (type != QWebEnginePage::WebBrowserBackgroundTab); + + tab = ::mainWindow->viewWindowMgr()->addNewTab(active); + tab->setZoomFactor( ::mainWindow->currentBrowser()->zoomFactor() ); + + if (active) + { + tab->setFocus( Qt::OtherFocusReason ); + } + } + break; + + case QWebEnginePage::WebDialog: + // TODO: implement + break; + } + + return tab; +} + void ViewWindow::onLoadFinished ( bool ) { // If m_storedScrollbarPosition is -1 this means we have not had a request to set the scrollbar; change to 0 diff --git a/src/viewwindow_webengine.h b/src/viewwindow_webengine.h index 3e96690..6312cfc 100644 --- a/src/viewwindow_webengine.h +++ b/src/viewwindow_webengine.h @@ -112,6 +112,8 @@ class ViewWindow : public QWebEngineView void contextMenuEvent( QContextMenuEvent *e ); //void mouseReleaseEvent ( QMouseEvent * event ); + virtual QWebEngineView* createWindow(QWebEnginePage::WebWindowType type) override; + private slots: // Used to restore the scrollbar position and the navigation button status void onLoadFinished ( bool ok ); From 6b9e95ba8abfc5601e43b7a4d63ff0faa846fe13 Mon Sep 17 00:00:00 2001 From: "i.Dark_Templar" <darktemplar@dark-templar-archives.net> Date: Fri, 11 Jun 2021 21:02:23 +0300 Subject: [PATCH 3/3] qtwebengine: synchronize url with navigation panel --- src/viewwindow_webengine.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/viewwindow_webengine.cpp b/src/viewwindow_webengine.cpp index df3859f..1bcdf6f 100644 --- a/src/viewwindow_webengine.cpp +++ b/src/viewwindow_webengine.cpp @@ -30,6 +30,7 @@ #include "config.h" #include "viewwindow_webengine.h" #include "mainwindow.h" +#include "navigationpanel.h" #include "viewwindowmgr.h" #include "ebook_chm.h" #include "ebook_epub.h" @@ -86,10 +87,15 @@ ViewWindow::ViewWindow( QWidget * parent ) pal.setColor( QPalette::Inactive, QPalette::Highlight, pal.color(QPalette::Active, QPalette::Highlight) ); pal.setColor( QPalette::Inactive, QPalette::HighlightedText, pal.color(QPalette::Active, QPalette::HighlightedText) ); setPalette( pal ); + + connect(this, &QWebEngineView::urlChanged, [this] (const QUrl &url) { + ::mainWindow->navigator()->findUrlInContents(url); + }); } ViewWindow::~ViewWindow() { + disconnect(this, &QWebEngineView::urlChanged, nullptr, nullptr); } void ViewWindow::invalidate( )