summaryrefslogtreecommitdiff
path: root/lib/widgets/Api/qwebenginepage.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/widgets/Api/qwebenginepage.cpp')
-rw-r--r--lib/widgets/Api/qwebenginepage.cpp25
1 files changed, 24 insertions, 1 deletions
diff --git a/lib/widgets/Api/qwebenginepage.cpp b/lib/widgets/Api/qwebenginepage.cpp
index 0bc6d85e1..f3f046675 100644
--- a/lib/widgets/Api/qwebenginepage.cpp
+++ b/lib/widgets/Api/qwebenginepage.cpp
@@ -36,11 +36,12 @@
QWebEnginePagePrivate::QWebEnginePagePrivate()
: QObjectPrivate(QObjectPrivateVersion)
- , adapter(new WebContentsAdapter(this))
+ , adapter(new WebContentsAdapter)
, history(new QWebEngineHistory(new QWebEngineHistoryPrivate(adapter.data())))
, view(0)
, m_isLoading(false)
{
+ adapter->initialize(this);
memset(actions, 0, sizeof(actions));
}
@@ -96,6 +97,17 @@ void QWebEnginePagePrivate::focusContainer()
view->setFocus();
}
+void QWebEnginePagePrivate::adoptNewWindow(WebContentsAdapter *newWebContents, WindowOpenDisposition disposition)
+{
+ Q_Q(QWebEnginePage);
+ QWebEnginePage *newPage = q->createWindow(disposition == WebContentsAdapterClient::NewPopupDisposition ? QWebEnginePage::WebModalDialog : QWebEnginePage::WebBrowserWindow);
+ // Overwrite the new page's WebContents with ours.
+ if (newPage) {
+ newPage->d_func()->adapter = newWebContents;
+ newWebContents->initialize(newPage->d_func());
+ }
+}
+
void QWebEnginePagePrivate::updateAction(QWebEnginePage::WebAction action) const
{
#ifdef QT_NO_ACTION
@@ -267,4 +279,15 @@ QUrl QWebEnginePage::url() const
return d->adapter->activeUrl();
}
+QWebEnginePage *QWebEnginePage::createWindow(WebWindowType type)
+{
+ Q_D(const QWebEnginePage);
+ if (d->view) {
+ QWebEngineView *newView = d->view->createWindow(type);
+ if (newView)
+ return newView->page();
+ }
+ return 0;
+}
+
#include "moc_qwebenginepage.cpp"