From be0901a8b153b77acd0b1c5ed14fbff4cf1216a3 Mon Sep 17 00:00:00 2001 From: Nikhil Tanwar <2002nikhiltanwar@gmail.com> Date: Mon, 24 Jan 2022 22:04:02 +0530 Subject: [PATCH] set zoom factor after page has finished loading This fixes the problem of page not getting the correct zoom factor (after accessing an article from searchbar) Now, the zoom factor is set again after page has completely finished loading --- src/webview.cpp | 37 ++++++++++++++++++++++++++++++++++++- src/webview.h | 1 + 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/webview.cpp b/src/webview.cpp index e546ee6..290d4f2 100644 --- a/src/webview.cpp +++ b/src/webview.cpp @@ -40,6 +40,29 @@ void WebViewForwardMenu::showEvent(QShowEvent *) setGeometry(geo); } +QString getZimIdFromUrl(QUrl url) +{ + return url.host().split('.')[0]; +} + +QString getResultTypeFromUrl(QUrl url) +{ + return url.host().split('.')[1]; +} + +void WebView::applyCorrectZoomFactor() { + auto url = this->url(); + auto settingsManager = KiwixApp::instance()->getSettingsManager(); + qreal zoomFactor; + const bool isSearchResultsView = QUrlQuery(url).hasQueryItem("pattern") && (getResultTypeFromUrl(url) == "search"); + if (isSearchResultsView) { + zoomFactor = settingsManager->getZoomFactor(); + } else { + auto zimId = getZimIdFromUrl(url); + zoomFactor = settingsManager->getZoomFactorByZimId(zimId); + } + this->setZoomFactor(zoomFactor); +} WebView::WebView(QWidget *parent) : QWebEngineView(parent) @@ -49,6 +72,18 @@ WebView::WebView(QWidget *parent) connect(this->page(), &QWebEnginePage::linkHovered, this, [=] (const QString& url) { m_linkHovered = url; }); + + /* In Qt 5.12, the zoom factor is not correctly passed after a fulltext search + * Bug Report: https://bugreports.qt.io/browse/QTBUG-51851 + * This rezooms the page to its correct zoom (default/by ZIM ID) after loading is finished. + * If the page is search results, we put the default zoom factor + * If in Qt 6.x, the bug is fixed this code can be removed. + */ + connect(this, &QWebEngineView::loadFinished, this, [=] (bool ok) { + if (ok) { + applyCorrectZoomFactor(); + } + }); } WebView::~WebView() @@ -125,7 +160,7 @@ QWebEngineView* WebView::createWindow(QWebEnginePage::WebWindowType type) } void WebView::onUrlChanged(const QUrl& url) { - auto zimId = url.host().split('.')[0]; + auto zimId = getZimIdFromUrl(url); if (m_currentZimId == zimId ) { return; } diff --git a/src/webview.h b/src/webview.h index fdde56c..5a5e1e2 100644 --- a/src/webview.h +++ b/src/webview.h @@ -69,6 +69,7 @@ private slots: private: void addHistoryItemAction(QMenu *menu, const QWebEngineHistoryItem &item, int n) const; + void applyCorrectZoomFactor(); }; #endif // WEBVIEW_H