summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJocelyn Turcotte <jocelyn.turcotte@digia.com>2013-08-13 16:49:42 +0200
committerJocelyn Turcotte <jocelyn.turcotte@digia.com>2013-08-20 17:48:44 +0200
commit6aa75f08ecac694636dfcd2d5586d3102f885606 (patch)
treea0ab3263965c41c677b1c6b29333831c1feecbb4
parent8986095a1e756bd42be414cc71afa8aadf972cbc (diff)
downloadqtwebengine-6aa75f08ecac694636dfcd2d5586d3102f885606.tar.gz
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>
-rw-r--r--lib/widgets/Api/qwebenginehistory.cpp6
-rw-r--r--lib/widgets/Api/qwebenginepage.cpp81
-rw-r--r--lib/widgets/Api/qwebenginepage.h2
-rw-r--r--lib/widgets/Api/qwebenginepage_p.h15
-rw-r--r--lib/widgets/Api/qwebengineview.cpp74
-rw-r--r--lib/widgets/Api/qwebengineview.h1
-rw-r--r--lib/widgets/Api/qwebengineview_p.h17
-rw-r--r--lib/widgets/render_widget_host_view_qt_delegate_widget.cpp8
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