summaryrefslogtreecommitdiffstats
path: root/lib/widgets
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 /lib/widgets
parent8986095a1e756bd42be414cc71afa8aadf972cbc (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.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