Merge pull request #774 from kiwix/zoomSearchFix

set zoom factor after page has finished loading
This commit is contained in:
Kelson 2022-02-25 12:37:37 +01:00 committed by GitHub
commit 09a0259554
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 37 additions and 1 deletions

View File

@ -40,6 +40,29 @@ void WebViewForwardMenu::showEvent(QShowEvent *)
setGeometry(geo); 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) WebView::WebView(QWidget *parent)
: QWebEngineView(parent) : QWebEngineView(parent)
@ -49,6 +72,18 @@ WebView::WebView(QWidget *parent)
connect(this->page(), &QWebEnginePage::linkHovered, this, [=] (const QString& url) { connect(this->page(), &QWebEnginePage::linkHovered, this, [=] (const QString& url) {
m_linkHovered = 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() WebView::~WebView()
@ -125,7 +160,7 @@ QWebEngineView* WebView::createWindow(QWebEnginePage::WebWindowType type)
} }
void WebView::onUrlChanged(const QUrl& url) { void WebView::onUrlChanged(const QUrl& url) {
auto zimId = url.host().split('.')[0]; auto zimId = getZimIdFromUrl(url);
if (m_currentZimId == zimId ) { if (m_currentZimId == zimId ) {
return; return;
} }

View File

@ -69,6 +69,7 @@ private slots:
private: private:
void addHistoryItemAction(QMenu *menu, const QWebEngineHistoryItem &item, int n) const; void addHistoryItemAction(QMenu *menu, const QWebEngineHistoryItem &item, int n) const;
void applyCorrectZoomFactor();
}; };
#endif // WEBVIEW_H #endif // WEBVIEW_H