diff options
Diffstat (limited to 'lib/widgets/Api/qwebengineview.cpp')
-rw-r--r-- | lib/widgets/Api/qwebengineview.cpp | 47 |
1 files changed, 38 insertions, 9 deletions
diff --git a/lib/widgets/Api/qwebengineview.cpp b/lib/widgets/Api/qwebengineview.cpp index 369aa6efa..aea228cc1 100644 --- a/lib/widgets/Api/qwebengineview.cpp +++ b/lib/widgets/Api/qwebengineview.cpp @@ -42,16 +42,42 @@ #include "qwebengineview.h" #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) +{ + if (view && page == view->d_func()->page) + return; + + if (page) { + // Un-bind page from its current view. + if (QWebEngineView *oldView = page->d_func()->view) { + page->disconnect(oldView); + oldView->d_func()->page = 0; + } + page->d_func()->view = view; + } + + if (view) { + // Un-bind view from its current page. + if (QWebEnginePage *oldPage = view->d_func()->page) { + oldPage->disconnect(view); + oldPage->d_func()->view = 0; + } + view->d_func()->page = page; + } +} + QWebEngineViewPrivate::QWebEngineViewPrivate() : QWidgetPrivate(QObjectPrivateVersion) , m_isLoading(false) , adapter(new WebContentsAdapter(this)) + , page(0) { } @@ -113,22 +139,25 @@ QWebEngineView::~QWebEngineView() { } -void QWebEngineView::load(const QUrl& url) +QWebEnginePage* QWebEngineView::page() const { - Q_D(QWebEngineView); - d->adapter->load(url); + Q_D(const QWebEngineView); + if (!d->page) { + QWebEngineView *that = const_cast<QWebEngineView*>(this); + that->setPage(new QWebEnginePage(that)); + } + return d->page; } -bool QWebEngineView::canGoBack() const +void QWebEngineView::setPage(QWebEnginePage* page) { - Q_D(const QWebEngineView); - return d->adapter->canGoBack(); + QWebEngineViewPrivate::bind(this, page); } -bool QWebEngineView::canGoForward() const +void QWebEngineView::load(const QUrl& url) { - Q_D(const QWebEngineView); - return d->adapter->canGoForward(); + Q_D(QWebEngineView); + d->adapter->load(url); } void QWebEngineView::back() |