diff options
author | Kirill Burtsev <kirill.burtsev@qt.io> | 2022-04-27 22:22:46 +0200 |
---|---|---|
committer | Kirill Burtsev <kirill.burtsev@qt.io> | 2022-06-01 23:11:51 +0200 |
commit | 91d53ffd54eaa7e2f8cf1bc6e076d645a45a6bee (patch) | |
tree | f788603173239d20fc2049be9e29a0b95bf9b725 /src | |
parent | 0f5d840ac79bab96253f8a577fd16fcba2b7c79c (diff) |
Keep page's zoom level on loading new urls
Ammends d236c5a8a3. Zoom level was set as a temporal one, which is
invalidated each time when a renderer process or widget are changed
(on new navigation, for example), so it needs to be reapplied.
Fixes: QTBUG-101030
Change-Id: Iecff9686fbe2b79e99b46f67cab92f66127be085
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Michal Klocek <michal.klocek@qt.io>
(cherry picked from commit 1e27d42a8071532b6cc30a9bcc5f700edc56952a)
Diffstat (limited to 'src')
-rw-r--r-- | src/core/web_contents_adapter_client.h | 1 | ||||
-rw-r--r-- | src/core/web_contents_delegate_qt.cpp | 5 | ||||
-rw-r--r-- | src/webengine/api/qquickwebengineview.cpp | 18 | ||||
-rw-r--r-- | src/webengine/api/qquickwebengineview_p_p.h | 1 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebenginepage.cpp | 12 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebenginepage_p.h | 1 |
6 files changed, 30 insertions, 8 deletions
diff --git a/src/core/web_contents_adapter_client.h b/src/core/web_contents_adapter_client.h index afc43806a..8203ce650 100644 --- a/src/core/web_contents_adapter_client.h +++ b/src/core/web_contents_adapter_client.h @@ -459,6 +459,7 @@ public: virtual void loadProgressChanged(int progress) = 0; virtual void didUpdateTargetURL(const QUrl&) = 0; virtual void selectionChanged() = 0; + virtual void zoomUpdateIsNeeded() = 0; virtual void recentlyAudibleChanged(bool recentlyAudible) = 0; virtual void renderProcessPidChanged(qint64 pid) = 0; virtual QRectF viewportRect() const = 0; diff --git a/src/core/web_contents_delegate_qt.cpp b/src/core/web_contents_delegate_qt.cpp index e7bfa6510..d211bdbfc 100644 --- a/src/core/web_contents_delegate_qt.cpp +++ b/src/core/web_contents_delegate_qt.cpp @@ -318,8 +318,10 @@ void WebContentsDelegateQt::RenderFrameHostChanged(content::RenderFrameHost *old if (new_host->GetFrameOwnerElementType() == blink::mojom::FrameOwnerElementType::kNone) { content::RenderProcessHost *renderProcessHost = new_host->GetProcess(); const base::Process &process = renderProcessHost->GetProcess(); - if (process.IsValid()) + if (process.IsValid()) { m_viewClient->renderProcessPidChanged(process.Pid()); + m_viewClient->zoomUpdateIsNeeded(); + } } } } @@ -329,6 +331,7 @@ void WebContentsDelegateQt::RenderViewHostChanged(content::RenderViewHost *, con if (newHost && newHost->GetWidget() && newHost->GetWidget()->GetView()) { auto rwhv = static_cast<RenderWidgetHostViewQt *>(newHost->GetWidget()->GetView()); m_viewClient->widgetChanged(rwhv->delegate()); + m_viewClient->zoomUpdateIsNeeded(); } } diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp index 7164a1c50..50e0711af 100644 --- a/src/webengine/api/qquickwebengineview.cpp +++ b/src/webengine/api/qquickwebengineview.cpp @@ -434,6 +434,12 @@ void QQuickWebEngineViewPrivate::selectionChanged() updateEditActions(); } +void QQuickWebEngineViewPrivate::zoomUpdateIsNeeded() +{ + Q_Q(QQuickWebEngineView); + q->setZoomFactor(m_zoomFactor); +} + void QQuickWebEngineViewPrivate::recentlyAudibleChanged(bool recentlyAudible) { Q_Q(QQuickWebEngineView); @@ -908,10 +914,8 @@ void QQuickWebEngineViewPrivate::initializationFinished() emit q->backgroundColorChanged(); } - if (!qFuzzyCompare(adapter->currentZoomFactor(), m_zoomFactor)) { - adapter->setZoomFactor(m_zoomFactor); - emit q->zoomFactorChanged(m_zoomFactor); - } + // apply if it was set before first ever navigation already + q->setZoomFactor(m_zoomFactor); #if QT_CONFIG(webengine_webchannel) if (m_webChannel) @@ -1149,9 +1153,11 @@ void QQuickWebEngineView::stop() void QQuickWebEngineView::setZoomFactor(qreal arg) { Q_D(QQuickWebEngineView); - if (d->adapter->isInitialized() && !qFuzzyCompare(d->m_zoomFactor, d->adapter->currentZoomFactor())) { + if (d->adapter->isInitialized() && !qFuzzyCompare(arg, zoomFactor())) { d->adapter->setZoomFactor(arg); - emit zoomFactorChanged(arg); + // MEMO: should reset if factor was not applied due to being invalid + d->m_zoomFactor = zoomFactor(); + emit zoomFactorChanged(d->m_zoomFactor); } else { d->m_zoomFactor = arg; } diff --git a/src/webengine/api/qquickwebengineview_p_p.h b/src/webengine/api/qquickwebengineview_p_p.h index ec535298b..a03f009f9 100644 --- a/src/webengine/api/qquickwebengineview_p_p.h +++ b/src/webengine/api/qquickwebengineview_p_p.h @@ -109,6 +109,7 @@ public: void loadProgressChanged(int progress) override; void didUpdateTargetURL(const QUrl&) override; void selectionChanged() override; + void zoomUpdateIsNeeded() override; void recentlyAudibleChanged(bool recentlyAudible) override; void renderProcessPidChanged(qint64 pid) override; QRectF viewportRect() const override; diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp index 5159ff588..f4281439f 100644 --- a/src/webenginewidgets/api/qwebenginepage.cpp +++ b/src/webenginewidgets/api/qwebenginepage.cpp @@ -247,6 +247,12 @@ void QWebEnginePagePrivate::selectionChanged() }); } +void QWebEnginePagePrivate::zoomUpdateIsNeeded() +{ + Q_Q(QWebEnginePage); + q->setZoomFactor(defaultZoomFactor); +} + void QWebEnginePagePrivate::recentlyAudibleChanged(bool recentlyAudible) { Q_Q(QWebEnginePage); @@ -2142,8 +2148,12 @@ void QWebEnginePage::setZoomFactor(qreal factor) { Q_D(QWebEnginePage); d->defaultZoomFactor = factor; - if (d->adapter->isInitialized()) + + if (d->adapter->isInitialized()) { d->adapter->setZoomFactor(factor); + // MEMO: should reset if factor was not applied due to being invalid + d->defaultZoomFactor = zoomFactor(); + } } void QWebEnginePage::runJavaScript(const QString &scriptSource) diff --git a/src/webenginewidgets/api/qwebenginepage_p.h b/src/webenginewidgets/api/qwebenginepage_p.h index ae3ab5d25..65252f8d8 100644 --- a/src/webenginewidgets/api/qwebenginepage_p.h +++ b/src/webenginewidgets/api/qwebenginepage_p.h @@ -100,6 +100,7 @@ public: void loadProgressChanged(int progress) override; void didUpdateTargetURL(const QUrl&) override; void selectionChanged() override; + void zoomUpdateIsNeeded() override; void recentlyAudibleChanged(bool recentlyAudible) override; void renderProcessPidChanged(qint64 pid) override; QRectF viewportRect() const override; |