diff options
6 files changed, 24 insertions, 10 deletions
diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp index 3436d86cf..83f77b4bd 100644 --- a/src/webenginewidgets/api/qwebenginepage.cpp +++ b/src/webenginewidgets/api/qwebenginepage.cpp @@ -216,7 +216,10 @@ void QWebEnginePagePrivate::selectionChanged() QRectF QWebEnginePagePrivate::viewportRect() const { - return view ? view->geometry() : QRectF(); + QRectF rect(QPointF(), viewportSize); + if (view) + rect.setTopLeft(view->rect().topLeft()); + return rect; } qreal QWebEnginePagePrivate::dpiScale() const @@ -500,10 +503,16 @@ void QWebEnginePage::findText(const QString &subString, FindFlags options, const } } -void QWebEnginePage::setViewportSize(const QSize &size) const +QSize QWebEnginePage::viewportSize() const { - Q_UNUSED(size) Q_D(const QWebEnginePage); + return d->viewportSize; +} + +void QWebEnginePage::setViewportSize(const QSize &size) +{ + Q_D(QWebEnginePage); + d->viewportSize = size; if (d->m_rwhvDelegate) d->m_rwhvDelegate->notifyResize(); } diff --git a/src/webenginewidgets/api/qwebenginepage.h b/src/webenginewidgets/api/qwebenginepage.h index aac37bc99..96ffeda3a 100644 --- a/src/webenginewidgets/api/qwebenginepage.h +++ b/src/webenginewidgets/api/qwebenginepage.h @@ -355,7 +355,7 @@ public: virtual void triggerAction(WebAction action, bool checked = false); QSize viewportSize() const; - void setViewportSize(const QSize &size) const; + void setViewportSize(const QSize &size); ViewportAttributes viewportAttributesForSize(const QSize& availableSize) const; QSize preferredContentsSize() const; diff --git a/src/webenginewidgets/api/qwebenginepage_p.h b/src/webenginewidgets/api/qwebenginepage_p.h index ed21c3816..773df00d4 100644 --- a/src/webenginewidgets/api/qwebenginepage_p.h +++ b/src/webenginewidgets/api/qwebenginepage_p.h @@ -142,13 +142,14 @@ public: QExplicitlySharedDataPointer<WebContentsAdapter> adapter; QWebEngineHistory *history; QWebEngineView *view; - mutable QAction *actions[QWebEnginePage::WebActionCount]; + QSize viewportSize; bool m_isLoading; QUrl m_explicitUrl; WebEngineContextMenuData m_menuData; QPointer<RenderWidgetHostViewQtDelegateWebPage> m_rwhvDelegate; mutable CallbackDirectory m_callbacks; + mutable QAction *actions[QWebEnginePage::WebActionCount]; }; QT_END_NAMESPACE diff --git a/src/webenginewidgets/api/qwebengineview.cpp b/src/webenginewidgets/api/qwebengineview.cpp index 3d884f464..a29349052 100644 --- a/src/webenginewidgets/api/qwebengineview.cpp +++ b/src/webenginewidgets/api/qwebengineview.cpp @@ -81,6 +81,7 @@ void QWebEngineViewPrivate::bind(QWebEngineView *view, QWebEnginePage *page) QObject::connect(page, &QWebEnginePage::loadProgress, view, &QWebEngineView::loadProgress); QObject::connect(page, &QWebEnginePage::loadFinished, view, &QWebEngineView::loadFinished); QObject::connect(page, &QWebEnginePage::selectionChanged, view, &QWebEngineView::selectionChanged); + page->setViewportSize(view->size()); } } diff --git a/src/webenginewidgets/render_widget_host_view_qt_delegate_webpage.cpp b/src/webenginewidgets/render_widget_host_view_qt_delegate_webpage.cpp index 2da55f66e..d6e99f4ea 100644 --- a/src/webenginewidgets/render_widget_host_view_qt_delegate_webpage.cpp +++ b/src/webenginewidgets/render_widget_host_view_qt_delegate_webpage.cpp @@ -54,21 +54,22 @@ RenderWidgetHostViewQtDelegateWebPage::RenderWidgetHostViewQtDelegateWebPage(RenderWidgetHostViewQtDelegateClient *client) : m_client(client) , m_page(0) + , m_pagePrivate(0) { } void RenderWidgetHostViewQtDelegateWebPage::initAsChild(WebContentsAdapterClient* container) { - QWebEnginePagePrivate *pagePrivate = static_cast<QWebEnginePagePrivate *>(container); - pagePrivate->m_rwhvDelegate = this; - m_page = pagePrivate->q_func(); + m_pagePrivate = static_cast<QWebEnginePagePrivate *>(container); + m_pagePrivate->m_rwhvDelegate = this; + m_page = m_pagePrivate->q_func(); Q_ASSERT(m_page); } QRectF RenderWidgetHostViewQtDelegateWebPage::screenRect() const { - if (m_page && m_page->view()) - return m_page->view()->rect(); + if (m_pagePrivate) + return m_pagePrivate->viewportRect(); // FIXME: figure out what to do with QWebFrame::contentsSize vs. preferedContentsSize return QRectF(0, 0, 800, 600); } diff --git a/src/webenginewidgets/render_widget_host_view_qt_delegate_webpage.h b/src/webenginewidgets/render_widget_host_view_qt_delegate_webpage.h index 5674e61c1..52988aefa 100644 --- a/src/webenginewidgets/render_widget_host_view_qt_delegate_webpage.h +++ b/src/webenginewidgets/render_widget_host_view_qt_delegate_webpage.h @@ -52,6 +52,7 @@ class BackingStoreQt; QT_BEGIN_NAMESPACE class QWindow; class QWebEnginePage; +class QWebEnginePagePrivate; QT_END_NAMESPACE class RenderWidgetHostViewQtDelegateWebPage : public QObject, public RenderWidgetHostViewQtDelegate @@ -86,6 +87,7 @@ protected: private: RenderWidgetHostViewQtDelegateClient *m_client; QWebEnginePage *m_page; + QWebEnginePagePrivate *m_pagePrivate; }; #endif |