diff options
author | Jocelyn Turcotte <jocelyn.turcotte@digia.com> | 2013-08-13 16:49:42 +0200 |
---|---|---|
committer | Jocelyn Turcotte <jocelyn.turcotte@digia.com> | 2013-08-20 17:48:44 +0200 |
commit | 6aa75f08ecac694636dfcd2d5586d3102f885606 (patch) | |
tree | a0ab3263965c41c677b1c6b29333831c1feecbb4 /lib/widgets | |
parent | 8986095a1e756bd42be414cc71afa8aadf972cbc (diff) |
Move the WebContentsAdapter to QWebEnginePage.
To allow QWebEnginePage to act on its own, let it own the WebContentsAdapter
and let the view delegate its calls through the page.
Change-Id: I851c753d068992e387edab0e1ea8018732af1fd7
Reviewed-by: Andras Becsi <andras.becsi@digia.com>
Diffstat (limited to 'lib/widgets')
-rw-r--r-- | lib/widgets/Api/qwebenginehistory.cpp | 6 | ||||
-rw-r--r-- | lib/widgets/Api/qwebenginepage.cpp | 81 | ||||
-rw-r--r-- | lib/widgets/Api/qwebenginepage.h | 2 | ||||
-rw-r--r-- | lib/widgets/Api/qwebenginepage_p.h | 15 | ||||
-rw-r--r-- | lib/widgets/Api/qwebengineview.cpp | 74 | ||||
-rw-r--r-- | lib/widgets/Api/qwebengineview.h | 1 | ||||
-rw-r--r-- | lib/widgets/Api/qwebengineview_p.h | 17 | ||||
-rw-r--r-- | lib/widgets/render_widget_host_view_qt_delegate_widget.cpp | 8 |
8 files changed, 116 insertions, 88 deletions
diff --git a/lib/widgets/Api/qwebenginehistory.cpp b/lib/widgets/Api/qwebenginehistory.cpp index 929d12b3f..a6afe62f1 100644 --- a/lib/widgets/Api/qwebenginehistory.cpp +++ b/lib/widgets/Api/qwebenginehistory.cpp @@ -43,8 +43,6 @@ #include "qwebenginehistory_p.h" #include "qwebenginepage_p.h" -#include "qwebengineview.h" -#include "qwebengineview_p.h" #include "web_contents_adapter.h" QWebEngineHistoryPrivate::QWebEngineHistoryPrivate() @@ -65,11 +63,11 @@ QWebEngineHistory::~QWebEngineHistory() bool QWebEngineHistory::canGoBack() const { Q_D(const QWebEngineHistory); - return d->pagePrivate->view->d_func()->adapter->canGoBack(); + return d->pagePrivate->adapter->canGoBack(); } bool QWebEngineHistory::canGoForward() const { Q_D(const QWebEngineHistory); - return d->pagePrivate->view->d_func()->adapter->canGoForward(); + return d->pagePrivate->adapter->canGoForward(); } diff --git a/lib/widgets/Api/qwebenginepage.cpp b/lib/widgets/Api/qwebenginepage.cpp index 082305e7b..91eeee1c2 100644 --- a/lib/widgets/Api/qwebenginepage.cpp +++ b/lib/widgets/Api/qwebenginepage.cpp @@ -46,10 +46,18 @@ #include "qwebenginehistory_p.h" #include "qwebengineview.h" #include "qwebengineview_p.h" +#include "render_widget_host_view_qt_delegate_widget.h" +#include "web_contents_adapter.h" + +#include <QUrl> +#include <QLayout> QWebEnginePagePrivate::QWebEnginePagePrivate() : QObjectPrivate(QObjectPrivateVersion) + , adapter(new WebContentsAdapter(this)) , history(new QWebEngineHistory) + , view(0) + , m_isLoading(false) { history->d_func()->pagePrivate = this; } @@ -59,6 +67,52 @@ QWebEnginePagePrivate::~QWebEnginePagePrivate() delete history; } +void QWebEnginePagePrivate::titleChanged(const QString &title) +{ + Q_Q(QWebEnginePage); + Q_EMIT q->titleChanged(title); +} + +void QWebEnginePagePrivate::urlChanged(const QUrl &url) +{ + Q_Q(QWebEnginePage); + Q_EMIT q->urlChanged(url); +} + +void QWebEnginePagePrivate::loadingStateChanged() +{ + Q_Q(QWebEnginePage); + const bool wasLoading = m_isLoading; + m_isLoading = adapter->isLoading(); + if (m_isLoading != wasLoading) { + if (m_isLoading) + Q_EMIT q->loadStarted(); + } +} + +QRectF QWebEnginePagePrivate::viewportRect() const +{ + return view ? view->geometry() : QRectF(); +} + +void QWebEnginePagePrivate::loadFinished(bool success) +{ + Q_Q(QWebEnginePage); + m_isLoading = adapter->isLoading(); + Q_EMIT q->loadFinished(success); +} + +void QWebEnginePagePrivate::focusContainer() +{ + if (view) + view->setFocus(); +} + +RenderWidgetHostViewQtDelegate *QWebEnginePagePrivate::CreateRenderWidgetHostViewQtDelegate() +{ + return new RenderWidgetHostViewQtDelegateWidget; +} + QWebEnginePage::QWebEnginePage(QObject* parent) : QObject(*new QWebEnginePagePrivate, parent) { @@ -85,4 +139,31 @@ QWidget *QWebEnginePage::view() const return d->view; } +void QWebEnginePage::triggerAction(WebAction action, bool) +{ + Q_D(QWebEnginePage); + switch (action) { + case Back: + d->adapter->navigateHistory(-1); + break; + case Forward: + d->adapter->navigateHistory(1); + break; + case Stop: + d->adapter->stop(); + break; + case Reload: + d->adapter->reload(); + break; + default: + Q_UNREACHABLE(); + } +} + +void QWebEnginePage::load(const QUrl& url) +{ + Q_D(QWebEnginePage); + d->adapter->load(url); +} + #include "moc_qwebenginepage.cpp" diff --git a/lib/widgets/Api/qwebenginepage.h b/lib/widgets/Api/qwebenginepage.h index 322ed5ba5..698a38d83 100644 --- a/lib/widgets/Api/qwebenginepage.h +++ b/lib/widgets/Api/qwebenginepage.h @@ -319,7 +319,7 @@ public: #ifndef QT_NO_ACTION QAction *action(WebAction action) const; #endif - virtual void triggerAction(WebAction action, bool checked = false) { Q_UNUSED(action); Q_UNUSED(checked); Q_UNREACHABLE(); } + virtual void triggerAction(WebAction action, bool checked = false); QSize viewportSize() const; void setViewportSize(const QSize &size) const; diff --git a/lib/widgets/Api/qwebenginepage_p.h b/lib/widgets/Api/qwebenginepage_p.h index ed9ad22a8..c7f4e3696 100644 --- a/lib/widgets/Api/qwebenginepage_p.h +++ b/lib/widgets/Api/qwebenginepage_p.h @@ -44,13 +44,17 @@ #include "qwebenginepage.h" +#include "web_contents_adapter_client.h" #include <QtCore/private/qobject_p.h> +#include <QScopedPointer> class QWebEngineHistory; class QWebEnginePage; class QWebEngineView; +class RenderWidgetHostViewQtDelegate; +class WebContentsAdapter; -class QWebEnginePagePrivate : public QObjectPrivate +class QWebEnginePagePrivate : public QObjectPrivate, public WebContentsAdapterClient { public: Q_DECLARE_PUBLIC(QWebEnginePage) @@ -58,6 +62,15 @@ public: QWebEnginePagePrivate(); ~QWebEnginePagePrivate(); + virtual RenderWidgetHostViewQtDelegate* CreateRenderWidgetHostViewQtDelegate() Q_DECL_OVERRIDE; + virtual void titleChanged(const QString&) Q_DECL_OVERRIDE; + virtual void urlChanged(const QUrl&) Q_DECL_OVERRIDE; + virtual void loadingStateChanged() Q_DECL_OVERRIDE; + virtual QRectF viewportRect() const Q_DECL_OVERRIDE; + virtual void loadFinished(bool success) Q_DECL_OVERRIDE; + virtual void focusContainer() Q_DECL_OVERRIDE; + + QScopedPointer<WebContentsAdapter> adapter; QWebEngineHistory *history; QWebEngineView *view; bool m_isLoading; diff --git a/lib/widgets/Api/qwebengineview.cpp b/lib/widgets/Api/qwebengineview.cpp index aea228cc1..86fec2715 100644 --- a/lib/widgets/Api/qwebengineview.cpp +++ b/lib/widgets/Api/qwebengineview.cpp @@ -43,11 +43,8 @@ #include "qwebengineview_p.h" #include "qwebenginepage_p.h" -#include "render_widget_host_view_qt_delegate_widget.h" -#include "web_contents_adapter.h" #include <QStackedLayout> -#include <QUrl> void QWebEngineViewPrivate::bind(QWebEngineView *view, QWebEnginePage *page) { @@ -71,63 +68,21 @@ void QWebEngineViewPrivate::bind(QWebEngineView *view, QWebEnginePage *page) } view->d_func()->page = page; } + + if (view && page) { + QObject::connect(page, &QWebEnginePage::titleChanged, view, &QWebEngineView::titleChanged); + QObject::connect(page, &QWebEnginePage::urlChanged, view, &QWebEngineView::urlChanged); + QObject::connect(page, &QWebEnginePage::loadStarted, view, &QWebEngineView::loadStarted); + QObject::connect(page, &QWebEnginePage::loadFinished, view, &QWebEngineView::loadFinished); + } } QWebEngineViewPrivate::QWebEngineViewPrivate() : QWidgetPrivate(QObjectPrivateVersion) - , m_isLoading(false) - , adapter(new WebContentsAdapter(this)) , page(0) { } -void QWebEngineViewPrivate::titleChanged(const QString &title) -{ - Q_Q(QWebEngineView); - Q_EMIT q->titleChanged(title); -} - -void QWebEngineViewPrivate::urlChanged(const QUrl &url) -{ - Q_Q(QWebEngineView); - Q_EMIT q->urlChanged(url); -} - -void QWebEngineViewPrivate::loadingStateChanged() -{ - Q_Q(QWebEngineView); - const bool wasLoading = m_isLoading; - m_isLoading = adapter->isLoading(); - if (m_isLoading != wasLoading) { - if (m_isLoading) - Q_EMIT q->loadStarted(); - } -} - -QRectF QWebEngineViewPrivate::viewportRect() const -{ - Q_Q(const QWebEngineView); - return q->geometry(); -} - -void QWebEngineViewPrivate::loadFinished(bool success) -{ - Q_Q(QWebEngineView); - m_isLoading = adapter->isLoading(); - Q_EMIT q->loadFinished(success); -} - -void QWebEngineViewPrivate::focusContainer() -{ - Q_Q(QWebEngineView); - q->setFocus(); -} - -RenderWidgetHostViewQtDelegate *QWebEngineViewPrivate::CreateRenderWidgetHostViewQtDelegate() -{ - return new RenderWidgetHostViewQtDelegateWidget; -} - QWebEngineView::QWebEngineView(QWidget *parent) : QWidget(*(new QWebEngineViewPrivate), parent, 0) { @@ -156,32 +111,27 @@ void QWebEngineView::setPage(QWebEnginePage* page) void QWebEngineView::load(const QUrl& url) { - Q_D(QWebEngineView); - d->adapter->load(url); + page()->load(url); } void QWebEngineView::back() { - Q_D(QWebEngineView); - d->adapter->navigateHistory(-1); + page()->triggerAction(QWebEnginePage::Back); } void QWebEngineView::forward() { - Q_D(QWebEngineView); - d->adapter->navigateHistory(1); + page()->triggerAction(QWebEnginePage::Forward); } void QWebEngineView::reload() { - Q_D(QWebEngineView); - d->adapter->reload(); + page()->triggerAction(QWebEnginePage::Reload); } void QWebEngineView::stop() { - Q_D(QWebEngineView); - d->adapter->stop(); + page()->triggerAction(QWebEnginePage::Stop); } #include "moc_qwebengineview.cpp" diff --git a/lib/widgets/Api/qwebengineview.h b/lib/widgets/Api/qwebengineview.h index afd7920bc..8cef6a4a7 100644 --- a/lib/widgets/Api/qwebengineview.h +++ b/lib/widgets/Api/qwebengineview.h @@ -129,7 +129,6 @@ protected: private: Q_DECLARE_PRIVATE(QWebEngineView); - friend class QWebEngineHistory; }; #endif // QWEBENGINEVIEW_H diff --git a/lib/widgets/Api/qwebengineview_p.h b/lib/widgets/Api/qwebengineview_p.h index d5c803c34..4cf29f8c6 100644 --- a/lib/widgets/Api/qwebengineview_p.h +++ b/lib/widgets/Api/qwebengineview_p.h @@ -42,17 +42,12 @@ #ifndef QWEBENGINEVIEW_P_H #define QWEBENGINEVIEW_P_H -#include "web_contents_adapter_client.h" - -#include <QScopedPointer> #include <QtWidgets/private/qwidget_p.h> #include <QtWebEngineWidgets/qwebengineview.h> class QWebEngineView; -class RenderWidgetHostViewQtDelegate; -class WebContentsAdapter; -class QWebEngineViewPrivate : public QWidgetPrivate, public WebContentsAdapterClient +class QWebEngineViewPrivate : public QWidgetPrivate { public: Q_DECLARE_PUBLIC(QWebEngineView) @@ -61,16 +56,6 @@ public: QWebEngineViewPrivate(); - virtual RenderWidgetHostViewQtDelegate* CreateRenderWidgetHostViewQtDelegate() Q_DECL_OVERRIDE; - virtual void titleChanged(const QString&) Q_DECL_OVERRIDE; - virtual void urlChanged(const QUrl&) Q_DECL_OVERRIDE; - virtual void loadingStateChanged() Q_DECL_OVERRIDE; - virtual QRectF viewportRect() const Q_DECL_OVERRIDE; - virtual void loadFinished(bool success) Q_DECL_OVERRIDE; - virtual void focusContainer() Q_DECL_OVERRIDE; - - bool m_isLoading; - QScopedPointer<WebContentsAdapter> adapter; QWebEnginePage *page; }; diff --git a/lib/widgets/render_widget_host_view_qt_delegate_widget.cpp b/lib/widgets/render_widget_host_view_qt_delegate_widget.cpp index 507471a78..845b67f55 100644 --- a/lib/widgets/render_widget_host_view_qt_delegate_widget.cpp +++ b/lib/widgets/render_widget_host_view_qt_delegate_widget.cpp @@ -42,7 +42,7 @@ #include "render_widget_host_view_qt_delegate_widget.h" #include "qwebengineview.h" -#include "qwebengineview_p.h" +#include "qwebenginepage_p.h" #include <QtGlobal> #include <QLayout> #include <QResizeEvent> @@ -75,8 +75,10 @@ RenderWidgetHostViewQtDelegateWidget::RenderWidgetHostViewQtDelegateWidget(QWidg void RenderWidgetHostViewQtDelegateWidget::initAsChild(WebContentsAdapterClient* container) { - QWebEngineViewPrivate *viewPrivate = static_cast<QWebEngineViewPrivate *>(container); - viewPrivate->q_func()->layout()->addWidget(this); + QWebEnginePagePrivate *pagePrivate = static_cast<QWebEnginePagePrivate *>(container); + // FIXME: What is going to trigger this if the page is attached later to the view? + if (pagePrivate->view) + pagePrivate->view->layout()->addWidget(this); } QRectF RenderWidgetHostViewQtDelegateWidget::screenRect() const |